2016-02-09 3 views
0

С помощью Guzzle (версия 3) я хотел бы указать тело запроса POST в «сыром» режиме. Я в настоящее время пробовал:Укажите необработанное тело запроса POST с помощью Guzzle

$guzzleRequest = $client->createRequest(
    'POST', 
    $uri, 
    null, 
    'un=one&deux=two' 
); 

Но он вроде как не работает. Если я сброшу свой $guzzleRequest, я вижу, что postFields->data пуст. Использование $guzzleRequest->setBody() впоследствии не помогает.

Однако, если я определяю тело как ['un'=>'one', 'deux'=>'two'], он работает должным образом.

Как я могу указать тело запроса как 'un=one&deux=two'?

ответ

0

Во-первых, я настоятельно рекомендую вам перейти на Guzzle 6, поскольку Guzzle 3 устарел и EOL.

Это было долгое время, поскольку я использовал жрать 3, но я полагаю, вы хотите следующее:

$request = $client->post(
    $uri, 
    $header = [], 
    $params = [ 
     'un' => 'one', 
     'deux' => 'two', 
]); 

$response = $request->send(); 

жрать автоматически установит заголовок Content-Type.

Дополнительная информация доступна с Post Request Documentation.

В ответ на ваш комментарий:

$request = $client->post(
    $uri, 
    $headers = ['Content-Type' => 'application/x-www-form-urlencoded'], 
    EntityBody::fromString($urlencodedstring) 
) 

Для этого, ссылка: EntityBody Source и RequestFactory::create()

+0

Благодаря Shaun, но это не ответ на мой вопрос. Я хочу передать содержимое тела как необработанную строку urlencoded, например '' un = one & deux = two'' – marcv

+0

, обновленный в ответ на комментарий –

+0

Если я использую 'new EntityBody ('un = one & deux = two')', я получаю «Ошибка потока должна быть ресурсом». Если я использую 'EntityBody :: factory ('un = one & deux = two')', я не получаю ошибки, но это не решает мою начальную проблему, ничего не отображается в '$ request-> postFields-> data' – marcv

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