2016-05-13 6 views
0

Я хотел бы добавить некоторые данные в запрос Guzzle Http. Есть имя файла, содержимое файла и заголовок с ключом авторизации.Guzzle 6 отправить многостраничные данные

$this->request = $this->client->request('POST', 'url', [ 
    'multipart' => [ 
     'name' => 'image_file', 
     'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'), 
     'headers' => 
      ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw'] 
      ]]); 

, но я получаю ошибку

Catchable Fatal Error: Argument 2 passed to GuzzleHttp\Psr7\MultipartStream::addElement() must be of the type array, string given, called in vendor\guzzlehttp\psr7\src\MultipartStream.php on line 70 and defined in vendor\guzzlehttp\psr7\src\MultipartStream.php line 79

В жрать 6 документации что-то вроде этого: http://docs.guzzlephp.org/en/latest/request-options.html#multipart

Кто знает, где я допустил ошибку?

+0

Есть некоторые примеры здесь: [Создание Symfony OAuth2 клиента API, аутентификация типа гранта пароль] (http://www.inanzzz.com/index.php/post/l4zx/creating-a-symfony -oauth2-api-client-that-authenticates-with-password-grant-type) и [Потребление API-интерфейса symfony с клиентом Guzzle из другого приложения] (http://www.inanzzz.com/index.php/post/u0xf/ consuming-symfony-api-with-guzzle-client-from-another-application) – BentCoder

+0

Спасибо, однако, эти руководства относятся к предыдущей версии Guzzle. Я использую последнюю версию. –

+0

Первая ссылка использует guzzle 6 – BentCoder

ответ

4

Вот решение. Заголовок с токеном доступа должен находиться за пределами многочастного раздела.

$this->request = $this->client->request('POST', 'request_url', [ 
      'headers' => [ 
       'Authorization' => 'Bearer access_token' 
      ], 
      'multipart' => [ 
       [ 
        'Content-type' => 'multipart/form-data', 
        'name' => 'image_file', 
        'contents' => fopen('image_file_url', 'r') 
       ] 
      ] 
     ]); 
1

В соответствии с Документами, «Значение многоголосных является массив ассоциативных массивов», так что вам нужно, чтобы гнездиться один уровень глубже:

$this->request = $this->client->request('POST', 'url', [ 
    'multipart' => [ 
     [ 
      'name' => 'image_file', 
      'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'), 
      'headers' => ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw'] 
     ] 
    ] 
]); 
+0

Я форматирую код, но получаю ту же ошибку. –

+0

@ PrzemekGawłowski Я не имею в виду, что вам просто нужно форматировать код по-разному, вам нужно предоставить мультипартийную опцию «массив ассоциативных массивов». В вашем коде вы просто даете ему один ассоциативный массив. Оберните несколько дополнительных квадратных скобок вокруг него, как в моем примере. – iainn

+0

Ты прав, мой плохой. Итак, теперь я получил это сообщение об ошибке :-( 'Catchable Fatal Error: Object of class GuzzleHttp \ Psr7 \ Response не удалось преобразовать в строку в функциях \ bootstrap \ FeatureContext.php line 246' –

Смежные вопросы