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:
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)