Отправка файла в веб-сервис с помощью Guzzle
Я пытался несколько часов сделать запрос POST, который отправляет файл.
Сначала попробовал простойfile_get_contents()
с контекстом потока, кажется, не работает. Я никогда не получаю ответ, пока GET на другом URL работает.
Я искал в Интернете HTTP-клиента и нашел Guzzle, который был загружен 400k раз на Packagist; Я решил попробовать эту технологию. Хорошо задокументировано, но, увы, ошибка появляется и при публикации этого чертового файла.
$request = $client
->post('/files/')
->addPostFields(array('comments' => 'no value'))
->addPostFile('file', 'test.doc')
->setAuth($this->username, $this->password);
У меня ушло несколько часов на чтение и просмотр сети, чтобы выяснить, что у меня возникла проблема «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>
После дополнительных поисков в Интернете я прочитал заголовок «Expect: 100-continue», автоматически отправляемый Guzzle, поэтому я попытался:
$request->removeHeader('expect');
Теперь я получаю плохую просьбу:
<!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>
Распечатывая заголовки запроса, я обнаружил, что:
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
Теперь я действительно в замешательстве, надеюсь, кто-то уже нашел решение этой проблемы. Я очень устал от всего этого :(