AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FritzBox auslesen - Problem SOAP-Abfrage

Ein Thema von TERWI · begonnen am 25. Sep 2025 · letzter Beitrag vom 26. Sep 2025
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
388 Beiträge
 
Delphi 11 Alexandria
 
#1

FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 13:25
Delphi-Version: 12 Athens
Moin zusammen !

Für ein kleines Projekt habe ich mit "Know-How-Transfer" aus hier vorhanden Quellen etwas übersichtlicheres zusammengebaut und erweitert..
"Discover" auch mehrerer Boxen funktioniert mit auslesen der TR-064- und verfügbaren uPNP-XML-Daten funzt prima.
Login's (hier zunächst nur "neuere" OS ab 7.5x) sind auch problemlos.
… fehlt nur noch das lesen & schreiben wünschenswerter Daten mittels "Seifen-Oper".

Ich verzweifele jedoch schon an dem Beispiel "10.5 SOAP Request with Action GetSecurityPort" aus dem PDF "AVM_TR-064_first_steps".
Die Fritz-Mädels quittieren meine SOAP-Anfragen mit permanentem ERROR 500/502.

Das sieht in Kürze mit INDY statt mit Winsock hier etwa so aus:
(Funktioniert beim Rest einwandfrei)
Delphi-Quellcode:
Aufruf mit;
  control := '/upnp/control/deviceinfo';
  service := 'urn:dslforum-org:service:DeviceInfo:1';
  action := 'GetSecurityPort';
Global:
  FBoxAct^.IP := 'Fritz.Box'; // oder jeweilige IP
  cFB_PORT_TCP := 49000;

function TDATA.Read_SOAP(Service, Action, Control : string): string;
var
   url, SA : string;
   Content : TStringList;
   HTTP : TIdHTTP;
begin
  result := '?';
  url := Format('http://%s:%d%s', [FBoxAct^.IP, cFB_PORT_TCP, Control]);
  SA := Format('SoapAction:%s#%s', [Service, action]);
  try
    Content := TStringList.Create;
    Content.Add('<?xml version="1.0"?>');
    Content.Add('<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">');
    Content.Add('<s:Body>');
    Content.Add(Format('<u:%s xmlns:u=%s></u:%s>', [Action, Service, Action]));
    Content.Add('</s:Body>');
    Content.Add('</s:Envelope>');
    Log('Read_SOAP', Content.Text);
    HTTP := TIdHTTP.Create(nil);
    HTTP.Request.Accept := 'text/xml';
    HTTP.Request.ContentType := 'text/xml';
    HTTP.Request.Charset := 'utf-8';
    HTTP.Request.CustomHeaders.Add(SA);
    result := HTTP.Post(url, Content);
  except
    on E: EIdHTTPProtocolException do
    begin
      Log('Read_SOAP', 'ERROR: ' + inttostr(E.ErrorCode) + ' |' + E.ErrorMessage);
    end;
  end;
  Content.Free;
  HTTP.Free;
end;
Mein CONTENT-LOG sieht so aus:
Code:
<?xml version="1.0"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:GetSecurityPort xmlns:u=urn:dslforum-org:service:DeviceInfo:1></u:GetSecurityPort>
</s:Body>
</s:Envelope>
Mein ERROR-LOG sieht so aus:
Code:
ERROR: 500 |
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>502</errorCode>
<errorDescription>XML error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Mit XML hab ich mich schon länger angefreundet, aber SOAP will nicht mein Freund werden ?!
Habe reichlich im WWW recherchiert - leider keine Lösung - kein Blitz hier.
Falsche, fehlende HTTP.Request Angaben / Einstellungen ?
Irgendwo ' " ' zu wenig / zu viel ? (probiert, keine Änderung)
... Hilfe bitte - in bin da leider überfordert.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
30 Beiträge
 
Delphi 12 Athens
 
#2

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 13:41
Moin,
als erstes fällt mir auf, dass in deiner XML die Anführungszeichen um den Namespace-Wert von GetSecurityPort fehlen. Richtig wäre:
Code:
<?xml version="1.0"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:GetSecurityPort xmlns:u="urn:dslforum-org:service:DeviceInfo:1"></u:GetSecurityPort>
</s:Body>
</s:Envelope>
Vielleicht reicht das ja schon. Denn die ErrorMessage der EIdHTTPProtocolException verweißt ja auf einen "XML error".
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
388 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 13:57
Das habe ich bei Recherche (u.a. IPPhone-, Arduino-Forum) auch schon gelesen.
Bringt leider keinerlei Änderung am Response.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.077 Beiträge
 
Delphi 12 Athens
 
#4

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 13:58
Google sagt das hier wäre die WSDL datei
http://fritz.box/xml/tr-064.xml

Das müsste reichen um dir einen SoapClient generieren zu lassen.

mit so einer Batch/cmd datei sollte es gehen , die "Idera-Mödels" sollten eine ITR064Client.Pas datei generieren.
Code:
c:
cd c:\TR064Client
powershell.exe -Command "(new-object System.Net.WebClient).DownloadFile('http://fritz.box/xml/tr-064.xml','ITR064Client.xml') "
Pause
c:
CD C:\Program Files (x86)\Embarcadero\Studio\23.0\bin
WSDLIMP -P -Ov+ -Oz- -Dc:\TR064Client c:\TR064Client\ITR064Client.xml
Pause
Fritz.box ist die URL der lokalen Fritzbox. unter umständen musst du sie durch ne IP adresse ersetzen
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (25. Sep 2025 um 14:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
388 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 14:15
Es liegt nicht an den IP's der Fritz-Mädels - die kenne ich alle via SSDP ("Discover").
Ich kann ja auch mit den Boxen sprechen und deren detaillierte XML's betreff verfügbaren Services & Actions auslesen.
Es geht hier eben im nächsten Schritt darum, die einzelnen "ServiceStateVarables" mittels dieser unsäglichen SEIFEN-OPER zu lesen / schreiben.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.077 Beiträge
 
Delphi 12 Athens
 
#6

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 13:48
Moin zusammen !

Für ein kleines Projekt habe ich mit "Know-How-Transfer" aus hier vorhanden Quellen etwas übersichtlicheres zusammengebaut und erweitert..
"Discover" auch mehrerer Boxen funktioniert mit auslesen der TR-064- und verfügbaren uPNP-XML-Daten funzt prima.
Login's (hier zunächst nur "neuere" OS ab 7.5x) sind auch problemlos.
… fehlt nur noch das lesen & schreiben wünschenswerter Daten mittels "Seifen-Oper".

Ich verzweifele jedoch schon an dem Beispiel "10.5 SOAP Request with Action GetSecurityPort" aus dem PDF "AVM_TR-064_first_steps".
Die Fritz-Mädels quittieren meine SOAP-Anfragen mit permanentem ERROR 500/502.
Ohne jetzt die PDF gelesen zu haben, exportiert deren Service keine WSDL Datei? Oder gibts von denen keine WSDL Datei an die man anders heran kommt?
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (25. Sep 2025 um 13:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
388 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 14:08
Google labert viel .... insbesondere dieser neue KI-Geschisss ... Sorry !
Ich möchte gerne simple & straight ohne WDSL und Importgedöns kommunizieren.
Die TR-064.XML und alles was via SSDP an XML angeboten wird, kann ich bereits erfolgreich lesen und weiss, was die Box(en) da an Kommunikation anbieten.
Das Problem ist hier die vermeintlich grundsätzliche (einfache) Kommunikation via SOAP (erst mal lesen, dann auch schreiben von Daten).
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.077 Beiträge
 
Delphi 12 Athens
 
#8

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 14:13
Ich habe das auch mal zufuß versucht so wie du das jetzt machst...aber naja es ist halt einfacher wenn man nichts tun muss und nicht fehler in irgendwelchen string suchen muss..
ich gucke zu hause mal ob ich die WSDL datei bekomme.
EDIT:
OK ... es gibt keine vollständigen WSDL daten von der Fritzbox. nur eine beschreibung in den SCPD dateien...
ich hasse UPnP...
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (25. Sep 2025 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
388 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 14:49
QuickAndDirty - Name ist Programm ? - genau mein Geschmack / Stil !
... musst nicht zwingend "Dirty" sein... aber einfach halt mit Basics.
Dieses WSDL-Gedöns brauche ich nicht. Wie soll man denn dort Fehler finden ?

Ich habe keinerlei Probleme, die Boxen betreff uPNP SCPD auszulesen !
Es geht hier explizit nur um eingangs benannte Probs bei dezidierter SOAP-Abfrage.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.077 Beiträge
 
Delphi 12 Athens
 
#10

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 15:06
Ich weiß nicht ob es hilft.
Aber wenn ich mit einem Test client nen Soap request sende gibt ein paar unterschiede zu deinem .
Ich habe das aus einem intercept-log gefischt.
Ich weiß nicht ob es hilft.

Beautyfied und Zeilenumbrüche eingefügt. Geloggt wurde es ohne Zeilenumbrüche und Einrückung, jedoch vermute ich das das LOG Zeilenumbrüche mit <EOL> end of line kodiert.
Code:
POST /soap/MY_V5 HTTP/1.1<EOL>
User-Agent: Embarcadero SOAP 1.4<EOL>Content-Type: text/xml; charset=utf-8<EOL>
SOAPAction: urn:MyIntf_V5-IMyTest_V5#Request_TestFunction<EOL>
Accept: */*<EOL>
Host: localhost:8080<EOL>
Content-Length: 605<EOL>
Connection: Keep-Alive<EOL>
<EOL>
<?xml version="1.0"?><EOL>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body xmlns:NS1="urn:MyIntf_V5-IMyTest_V5" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <NS1:Request_TestFunction>
      <TestParam xsi:type="xsd:string">TESTWERT1</TestParam>
    </NS1:Request_TestFunction>  
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope><EOL>

Accept = */*
kein EncodingStyle im envelope header aber etliche andere parameter.
Statt dessen Encodingsytel im bodyheader...
Datei-Interface('MyIntf_V5-IMyTest_V5') name im Bodyheader

Ich weiß nicht ob es hilft. Aber dein SOAP request sieht halt etwas anders aus als die in meinen logs. Ich weiß leider nicht wie sehr das entscheidend ist.

Error discription "XML-error" deutet auf einen fehler im Encodeing im Body oder im Envelope hin , vieleicht solltest du die encodings wie Idera das macht im Envelope header und body header festlegen?
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (25. Sep 2025 um 15:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz