PHP GuzzleHttp. Как сделать почтовый запрос с параметрами?
Как сделать почтовый запрос с GuzzleHttp (версия 5.0).
Я пытаюсь сделать следующее:
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'email' => '[email protected]',
'name' => 'Test user',
'password' => 'testpassword'
)
);
Но я получаю ошибку:
Неустранимая ошибка PHP: необработанное исключение "InvalidArgumentException" с сообщением "Ни один метод не может обработать ключ конфигурации электронной почты"
Ответы
Ответ 1
Попробуйте это
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'form_params' => array(
'email' => '[email protected]',
'name' => 'Test user',
'password' => 'testpassword'
)
)
);
Ответ 2
Поскольку ответ Marco устарел, вы должны использовать следующий синтаксис (согласно комментарию 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();
}
);
Больше информации для отладки
Если вам нужна более подробная информация, вы можете использовать опцию debug
например:
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => '[email protected]',
'name' => 'Test user',
'password' => 'testpassword',
],
// If you want more informations during request
'debug' => true
]);
Документация более подробно о новых возможностях.
Ответ 3
Примечание в Guzzle V6.0 +, другим источником получения следующей ошибки может быть неправильное использование JSON в качестве массива:
Передача в опции запроса "тело" в виде массива для отправки POST запрос устарел. Пожалуйста, используйте запрос "form_params" возможность отправки запроса приложения /x -www-form-urlencoded или Опция "multipart" для отправки запроса multipart/form-data.
Некорректное
$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',
])
])
Ответ 4
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
'body' => json_encode($dataArray)
]);
$response = $request->getBody();
добавлять
openssl.cafile
в файле php.ini