Wysyłanie pliku do usługi internetowej za pomocą Guzzle
Od kilku godzin próbuję wykonać żądanie POST, które wysyła plik.
Najpierw spróbowałem prostegofile_get_contents()
z kontekstem strumienia, wydaje się nie działać. Nigdy nie otrzymuję odpowiedzi, gdy działa GET na innym adresie URL.
Szukałem w Internecie klienta HTTP i znalazłem Guzzle, który został pobrany 400k razy na Packagist; Postanowiłem wypróbować tę technologię. Dobrze udokumentowane, ale, niestety, pojawia się błąd także przy wysyłaniu tego cholernego pliku.
$request = $client
->post('/files/')
->addPostFields(array('comments' => 'no value'))
->addPostFile('file', 'test.doc')
->setAuth($this->username, $this->password);
Zajęło mi wiele godzin czytanie i przeszukiwanie sieci, aby dowiedzieć się, że miałem problem „417 Expectation Failed”.
<!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>
Po dalszych poszukiwaniach w sieci skończyło się na przeczytaniu nagłówka „Expect: 100-continue”, który został automatycznie wysłany przez Guzzle, więc spróbowałem:
$request->removeHeader('expect');
Teraz kończę na złej prośbie:
<!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>
Wydrukowanie nagłówków żądań, aby znaleźć: brakujące, otrzymuję:
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
Teraz jestem naprawdę zakłopotany, mam nadzieję, że ktoś już znalazł rozwiązanie tego problemu. Jestem tym naprawdę bardzo zmęczony :(