2015-01-07 3 views
30

Как сделать почтовый запрос с помощью GuzzleHttp (версия 5.0). Я пытаюсь сделать следующее и получаю ошибкуPHP GuzzleHttp. Как сделать запрос с параметрами?

$client = new \GuzzleHttp\Client(); 
$client->post(
    'http://www.example.com/user/create', 
    array(
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword' 
    ) 
); 

PHP Фатальная ошибка: неперехваченное исключение «InvalidArgumentException» с сообщением «Нет способа может обрабатывать ключ электронной конфигурации»

ответ

30

Попробуйте

$client = new \GuzzleHttp\Client(); 
$client->post(
    'http://www.example.com/user/create', 
    array(
     'body' => array(
      'email' => '[email protected]', 
      'name' => 'Test user', 
      'password' => 'testpassword' 
     ) 
    ) 
); 
+46

Этот метод в настоящее время осуждается в 6.0. Вместо «тела» используйте «form_params». – jasonlfunk

+2

Передача запроса «тело» в качестве массива для отправки запроса POST устарела. Пожалуйста, используйте параметр запроса «form_params» для отправки запроса приложения/x-www-form-urlencoded или опции «multipart» для отправки запроса multipart/form-data. –

+0

@JeremyQuinton, так что вы выбрали именно это ... ответьте – Madhur

69

С Ответ Марко устарел, вы должны использовать следующий синтаксис (согласно комментарию jasonlfunk):

$client = new \GuzzleHttp\Client(); 
$response = $client->request('POST', 'http://www.example.com/user/create', [ 
    'form_params' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ] 
]); 

Запрос с файлами POST

$response = $client->request('POST', 'http://www.example.com/files/post', [ 
    'multipart' => [ 
     [ 
      'name'  => 'file_name', 
      'contents' => fopen('/path/to/file', 'r') 
     ], 
     [ 
      'name'  => 'csv_header', 
      'contents' => 'First Name, Last Name, Username', 
      'filename' => 'csv_header.csv' 
     ] 
    ] 
]); 

REST глаголы использования с Params

данных
// PUT 
$client->put('http://www.example.com/user/4', [ 
    'body' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ], 
    'timeout' => 5 
]); 

// DELETE 
$client->delete('http://www.example.com/user'); 

Асинхронный POST

полезна для длительных операций сервера.

$client = new \GuzzleHttp\Client(); 
$promise = $client->requestAsync('POST', 'http://www.example.com/user/create', [ 
    'form_params' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ] 
]); 
$promise->then(
    function (ResponseInterface $res) { 
     echo $res->getStatusCode() . "\n"; 
    }, 
    function (RequestException $e) { 
     echo $e->getMessage() . "\n"; 
     echo $e->getRequest()->getMethod(); 
    } 
); 

Documentation более подробно рассказывает о новых возможностях.

+0

Как я могу отправить строку запроса в почтовом запросе ? –

+0

Что вы ищете? Если строка запроса является частью URL-адреса, вы должны добавить его прямо в URL-адрес, например ** http: //www.example.com/user/create? Mode = dev "**. – jedema

+0

Я пытаюсь отправить сообщение запрос на paypal с закодированными url данными.Я думаю, что его ['body'] ключ. –

14

Обратите внимание на жрать V6.0 +, другой источник получения следующее сообщение об ошибке может быть неправильное использование JSON как массив:

Passing in the "body" request option as an array to send a POST request has been deprecated. Please use the "form_params" request option to send a application/x-www-form-urlencoded request, or a the "multipart" request option to send a multipart/form-data request.

Некорректное:

$response = $client->post('http://example.com/api', [ 
    'body' => [ 
     'name' => 'Example name', 
    ] 
]) 

Правильный :

$response = $client->post('http://example.com/api', [ 
    'json' => [ 
     'name' => 'Example name', 
    ] 
]) 

Правильный:

$response = $client->post('http://example.com/api', [ 
    'headers' => ['Content-Type' => 'application/json'], 
    'body' => json_encode([ 
     'name' => 'Example name', 
    ]) 
]) 
Смежные вопросы