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 2 von 2     12   
Benutzerbild von TERWI
TERWI

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

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 15:04
Zu diesem Thema habe ich auch schon einiges, nicht wirklich erquickendes zur Lösung gefunden.
TStringlist funktionert mit POST auch betreff XML einwandfrei.
TStringStream in andere Art & Weise mglw. sicher auch - 2 Wege - ein Ziel ?!
Generelles Lesen von XML-Daten aus Box(en) funktioniert hier ja problemlos !
LUA-scripts, TR-064-Daten, XMLs aus (uPnP) SSDP und SCPD-Daten daraus lesen ist nicht das Thema !

.... einzig dieser SOAP-Gerümpel macht mir Kopfschmerzen.

Geändert von TERWI (25. Sep 2025 um 15:10 Uhr)
  Mit Zitat antworten Zitat
EKON 29
QuickAndDirty

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

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
mjustin

Registriert seit: 14. Apr 2008
3.017 Beiträge
 
Delphi 2009 Professional
 
#13

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 15:18
Zu diesem Thema habe ich auch schon einiges, nicht wirklich erquickendes zur Lösung gefunden.
TStringlist funktionert mit POST auch betreff XML einwandfrei.
Nein, das ist nicht der Fall. In https://blog.habarisoft.com/2015/03/...-6-https-post/ habe ich auf die Antwort eines Indy-Entwicklers verlinkt (https://stackoverflow.com/a/28493431/80901):

Zitat:
You are using the wrong version of Post() to begin with.

You are using the overloaded version of Post() that accepts a TStrings as input. That version is intended for posting HTML webforms in application/x-www-form-urlencoded format, where the TStrings is expected to contain name=value strings that get encoded according to W3C's rules for submitting webforms. That is why you are seeing your XML being encoded the way it is.
Michael Justin

Geändert von mjustin (25. Sep 2025 um 15:20 Uhr) Grund: URL ergänzt
  Mit Zitat antworten Zitat
QuickAndDirty

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

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt 25. Sep 2025, 15:34
Evtl noch eine sache du Gibst ein Soap 1.1 encoding im Envelope an, aber du verwendest einen präfix "s:" der erst ab Soap 1.2 gebräuchlich war...
offiziell ist der Präfix zwar egal...aber manchmal sind parser auch falsch implementiert und erwarten ganz bestimmte präfixe wie "SOAP-ENV:" "soap:" "soapenv:" oder "env:"
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: FritzBox auslesen - Problem SOAP-Abfrage

  Alt Gestern, 09:42
@Michael --- 1000 DANK ! YEPP - funzt !

TStringStream statt TStringList macht den elementaren Unterschied.
Insbesondere m.E.n. das UTF-8 Encoding der "Seifenschachtel" ?!
Vermutung: Neben der Ansage via ContentType das UTF-8 kommt, muss das bei SOAP anscheinend auch machen.
Beim lesen von Desription's und zugehörigen SCPD-Dateien via XML scheint das offensichtlich unkritisch.
Das hier funktioniert nun tadellos:
Delphi-Quellcode:
function TDATA.Read_SOAP(Path, Service, Action : string): string;
var url : string;
    HTTP : TIdHTTP;
    SoapReq : string;
    SoapStream : TStringStream;
begin
  result := '?';
  url := Format('http://%s:%d%s', [FBoxAct^.IP, cFB_PORT_TCP, Path]);
  Log('Read_SOAP', url);
  SoapReq := '<?xml version="1.0" encoding="utf-8"?>' +
             '<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" ' +
               'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +
             '<s:Body>' +
             Format('<u:%s xmlns:u=%s></u:%s>', [Action, Service, Action]) +
             '</s:Body>' +
             '</s:Envelope>';
  try
    SoapStream := TStringStream.Create(SoapReq, TEncoding.UTF8);
    HTTP := TIdHTTP.Create(nil);
    HTTP.Request.ContentType := 'text/xml';
    HTTP.Request.Charset := 'utf-8';
    HTTP.Request.CustomHeaders.Values['SOAPAction'] := Format('%s#%s', [Service, Action]);
    result := HTTP.Post(url, SoapStream); // Content);
  except
    on E: EIdHTTPProtocolException do
      Log('Read_SOAP', 'ERROR: ' + inttostr(E.ErrorCode) + ' |' + E.ErrorMessage);
  end;
  SoapStream.free;
  HTTP.Free;
end;
Wie erwartet kommt das zurück:
Code:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:GetSecurityPortResponse xmlns:u="urn:dslforum-org:service:DeviceInfo:1">
<NewSecurityPort>49443</NewSecurityPort>
</u:GetSecurityPortResponse>
</s:Body>
</s:Envelope>
Basis ist da - schaue ich mal, ob SSL notwendig ist und wie es sich beim schreiben via SOAP verhält.
Insbesondere bei notwendigem Login und Übergabe notwendiger Daten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 12:13 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