Problem mit XMLRPC-Schnittstelle
Sven Burkert
- php
0 ChrisB0 Sven Burkert0 ChrisB
Hallo,
ich komme allein nicht weiter, ich habe ein etwas seltsames Verhalten meiner XMLRPC-Schnittstelle:
Bestimmte Methoden funktionieren (z.B. gibt es eine ping-Methode oder authenticate-Methode), hier bekomme ich eine korrekte Antwort.
Dann gibt es aber noch eine Methode, über die eine Datei übertragen wird. Als Antwort bekomme ich auch wieder eine Datei. Das funktioniert soweit. Sobald ich aber eine größere Datei übertrage (~ >10 kb), ist die Antwort unvollständig, sie wird mittendrin abgeschnitten (nicht einmal die Tags aus der Antwort werden geschlossen).
So sieht die Antwort z.B. aus:
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><string>UEsDBBQAAAAAABa5ZTtVjTsIn58AAJ+fAAAKAAAAb3V0cHV0LnBkZiVQREYtMS40CiXi48/TCgIDAgb2JqCjw8L1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDIgMCBSPj4KZW5kb2JqCgoyIDAgb2JqCjw8[...]
Der PHP Code sieht folgendermaßen aus:
$request = xmlrpc_encode_request('do_something', array($myFile));
$context = stream_context_create(array('http' => array(
'method' => 'POST',
'header' => 'Content-Type: text/xml',
'content' => $request
)));
$file = file_get_contents(sprintf('http://%s:%d/%s', $this->host, $this->port, 'do_something'), false, $context);
var_dump($file);
var_dump($file) erzeugt die obige (unvollständige) Ausgabe.
Kann mir jemand weiterhelfen?
Hi,
Dann gibt es aber noch eine Methode, über die eine Datei übertragen wird. Als Antwort bekomme ich auch wieder eine Datei.
Wie hängt die Antwort von dem ab, was du schickst?
Das funktioniert soweit. Sobald ich aber eine größere Datei übertrage (~ >10 kb), ist die Antwort unvollständig, sie wird mittendrin abgeschnitten (nicht einmal die Tags aus der Antwort werden geschlossen).
Welche Grösse hat denn die unvollständige Antwort? Besteht ein Verhältnis zur Grösse dessen, was du sendest?
Kannst du kontrollieren, ob der andere Server die Datei, die du ihm geschickt hast, denn noch vollständig empfangen hat?
MfG ChrisB
Wie hängt die Antwort von dem ab, was du schickst?
Die Datei, die ich schicke, wird umgewandelt (in ein PDF).
Welche Grösse hat denn die unvollständige Antwort? Besteht ein Verhältnis zur Grösse dessen, was du sendest?
Stimmt, dazu wollte ich noch etwas schreiben: Schicke ich eine große Datei, ist die Response auch größer.
Kannst du kontrollieren, ob der andere Server die Datei, die du ihm geschickt hast, denn noch vollständig empfangen hat?
Nicht direkt. Aber da ich eine ZIP-Datei schicke, bin ich mir recht sicher, dass diese komplett ankommt, sonst würde die Gegenseite eine Fehlermeldung ausgeben.
Hi,
Kannst du kontrollieren, ob der andere Server die Datei, die du ihm geschickt hast, denn noch vollständig empfangen hat?
Nicht direkt. Aber da ich eine ZIP-Datei schicke, bin ich mir recht sicher, dass diese komplett ankommt, sonst würde die Gegenseite eine Fehlermeldung ausgeben.
Na dann läge der Fehler ja bei der Gegenstelle.
Also untersuche ihn dort, bzw. lasse um Untersuchung bitten, wenn du für diese nicht zuständig bist.
MfG ChrisB
Na dann läge der Fehler ja bei der Gegenstelle.
Kann es nicht an mir liegen? :)
Oder an einem Bug in PHP / dem XMLRPC-Modul?
Meiner Server-Konfiguration?
...?
Die Gegenstelle sagt, dass alles funktionieren sollte.
Die XMLRPC-Schnittstelle wird bisher über ein Python-Skript genutzt und hier scheint alles zu funktionieren, die Nutzung über PHP ist neu.
Hallo Sven,
Oder an einem Bug in PHP / dem XMLRPC-Modul?
Das ist eher wahrscheinlich. Zunächst würde ich nicht mit file_get_contents() arbeiten, um auf den HTTP-Wrapper PHPs zurückzugreifen. Nimm stattdessen fsockopen() oder stream_socket_client(). Bei beiden bist Du fähig, TCP-Timeouts selbst zu setzten, was hier eine mögliche Fehlerquelle wäre. Nebenher sieh Dir request und response mit HTTP-Headern an.
Ansonsten welche PHP-Version nutzt Du (bitte auch CGI-, Modul-, CLI-Version angeben)?
Meiner Server-Konfiguration?
Da der entgegengenommene response in der Größe variiert, wie Du schriebst, scheidet ein formaler Grund aus. Dennoch kann es an der Konfiguration liegen. Welchen Server welcher Version nutzt Du denn?
Gruß aus Berlin!
eddi