guzzlehttp / guzzle отправляет HTTP-запрос раньше — & gt; send ()

Я пытаюсь использовать Guzzle, чтобы потреблять RESTful API. Чтение Жрать документацию, Я называю методы как get а также post чтобы настроить запрос, то send на самом деле запустить запрос HTTP.

$request = $client->post('http://httpbin.org/post', array(), array(
'custom_field' => 'my custom value',
'file_field'   => '@/path/to/file.xml'
));

$response = $request->send();

Однако в моем случае кажется, что HTTP-запрос отправляется во время звонка post без полей. Вот мой код

define('CUST_ID', 'blahblah');
define('API_KEY', 'verysecure');

// Construct the underlying Guzzle client
$oClient = new \GuzzleHttp\Client(
['base_url' =>
['http://api.postmates.com/{version}/', ['version' => 'v1']],
'defaults' => [
// HTTP Basic auth header, username is api key, password is blank
'auth'    => [API_KEY, ''],
]]);
$oRq = $oClient->post(
"customers/" . CUST_ID . "/delivery_quotes",
[],
['pickup_address'  => '232 E Manhattan Ave, Denver, CO 80203',
'dropoff_address' => '4400 Midwest St, Denver, CO 80205']);

Запрос, который выходит хотя (без параметров POST)

POST /v1/customers/blahblah/delivery_quotes HTTP/1.1
Host: api.postmates.com
Authorization: Basic verysecure==
User-Agent: Guzzle/5.2.0 curl/7.37.1 PHP/5.6.0
Content-Length: 0

и ответ

HTTP/1.1 400 BAD REQUEST
Content-Type: application/json
Date: Fri, 13 Feb 2015 07:32:16 GMT
Server: nginx/1.1.19
Content-Length: 205
Connection: keep-alive

{"kind": "error", "code": "invalid_params", "params": {"dropoff_address": "This field is required.", "pickup_address": "This field is required."}, "message": "The parameters of your request were invalid."}

Похоже, я проверяю подлинность, но не передаю параметры сообщения. Я пытался использовать setPostField метод для установки полей POST без удачи. Как я уже сказал, кажется, что в этом случае HTTP-запрос отправляется до вызова setPostFieldв любом случае HTTP-запрос отправляется до того, как я позвоню send,

Я пробовал guzzlehttp / guzzle 5.2.0 и 5.0.0.

1

Решение

Ничего себе, похоже, что я искал 2 документа, один для новее GuzzleHttp\Client, один для старший Guzzle\Http\Client. Большая разница с новой библиотекой — вам нужно позвонить createRequest если вы хотите отложить вызов HTTP-запроса.

Рабочий код в новой библиотеке

define('CUST_ID', 'blahblah');
define('API_KEY', 'verysecure');

// Construct the underlying Guzzle client
$oClient = new GuzzleHttp\Client(
['base_url' =>
['http://api.postmates.com/{version}/', ['version' => 'v1']],
'defaults' => [
// HTTP Basic auth header, username is api key, password is blank
'auth'    => [API_KEY, ''],
]]);

// Create the request
$oRq = $oClient->createRequest(
'POST',
"customers/" . CUST_ID . "/delivery_quotes",
[ 'body' =>
['pickup_address'  => '232 E Manhattan Ave, Denver, CO 80203',
'dropoff_address' => '4400 Midwest St, Denver, CO 80205']]);

// Send the request
$oRsp = $oClient->send($oRq);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]