Senden einer Datei an einen Webdienst mit Guzzle

Ich habe mehrere Stunden lang versucht, eine POST-Anfrage zu stellen, die eine Datei sendet.

Zuerst probiert ein einfacherfile_get_contents() mit Stream-Kontext scheint nicht zu funktionieren. Ich erhalte nie eine Antwort zurück, während das GET für eine andere URL funktioniert.

Ich suchte im Web nach einem HTTP-Client und fand Guzzle, das 400.000 Mal auf Packagist heruntergeladen wurde. Ich habe mich entschlossen, diese Technologie auszuprobieren. Gut dokumentiert, aber leider wird auch beim Posten dieser verdammten Datei ein Fehler angezeigt.

$request = $client
    ->post('/files/')
    ->addPostFields(array('comments' => 'no value'))
    ->addPostFile('file', 'test.doc')
    ->setAuth($this->username, $this->password);

Es dauerte Stunden, bis ich herausgefunden hatte, dass das Problem "417 Expectation Failed" bestand.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>417 Expectation Failed</title>
</head><body>
<h1>Expectation Failed</h1>
<p>The expectation given in the Expect request-header
field could not be met by this server.
The client sent<pre>
    Expect: 100-Continue, 100-Continue
</pre>
</p><p>Only the 100-continue expectation is supported.</p>
</body></html>

Nachdem ich mehr im Internet gesucht hatte, las ich den Header "Expect: 100-continue", der automatisch von Guzzle gesendet wurde, und versuchte Folgendes:

$request->removeHeader('expect');

Ich habe jetzt eine schlechte Anfrage:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
zzle/3.7.3 curl/7.15.5 PHP/5.3.27</pre>
</p>
</body></html>

Drucken der Anforderungsheader, um festzustellen, dass: fehlt, ich erhalte:

var_dump($request->__toString());

POST /files/ HTTP/1.1
Host: nunc57.qc.bell.ca
User-Agent: Guzzle/3.7.3 curl/7.15.5 PHP/5.3.27
Content-Type: multipart/form-data
Authorization: Basic bm92YTpzeW5hcHNl

Jetzt bin ich wirklich ratlos, ich hoffe, jemand hat bereits eine Lösung für dieses Problem gefunden. Ich werde von all dem wirklich müde :(

Antworten auf die Frage(1)

Ihre Antwort auf die Frage