Thread SOAP - Aufruf von Funktion mit Übergabe geht nicht
(8 answers)
Opened by ArthurDent at 2012-04-09 09:06
Guck Dir die zu sendende XML Datei an, ob die SportID an der Stelle steht, wo sie hinsoll. Vergleichsweise erstelle die zu sendende XML selbst, z.B. mit einer geeigneten Template-Engine und ersetze selbst die Platzhalter so, wie in der Doku beschrieben. Sende die XML-Datei und guck Dir die Response an.
PS: Senden kannst du auch mit IO::Socket, prüfe, ob der Wert für den Content-Length Header eingetragen ist. Setze Connection: Close oder HTTP/1.0. Die Response erhältst Du, indem Du nach dem Schreiben in das Socket ebendieses ausliest, solange da noch Daten kommen. Gleich mal getestet: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 binmode STDOUT; use strict; use warnings; use IO::Socket; my $data = do{ local $/ = undef, <DATA>}; my $length = length $data; my $host = "www.openligadb.de"; my $sock = IO::Socket::INET->new("$host:80") or die $@; print $sock <<EOT; POST /Webservices/Sportsdata.asmx HTTP/1.0 Host: $host Content-Type: text/xml; charset=utf-8 Content-Length: $length SOAPAction: "http://msiggi.de/Sportsdata/Webservices/GetAvailLeagues" $data EOT while( read($sock, my $buffer, 123) ){ print $buffer; } __DATA__ <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAvailLeagues xmlns="http://msiggi.de/Sportsdata/Webservices" /> </soap:Body> </soap:Envelope> Die Antwort kommt und so dürfte das mit den anderen XML-Templates auch funktionieren. PS/Edit: Also ich würde das bischen XML zum senden über ein Template erzeugen, die Datei senden mit LWP::UserAgent und zum Parsen der Response einen XML-Parser meiner Wahl einsetzen. Mit SOAP::Lite wird das ne ziemliche Akrobatik. Last edited: 2015-03-17 22:16:49 +0100 (CET) |