PHP GuzzleHttp. How to make a post request with params?
Solution 1
Try this
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'form_params' => array(
'email' => '[email protected]',
'name' => 'Test user',
'password' => 'testpassword'
)
)
);
Solution 2
Since Marco's answer is deprecated, you must use the following syntax (according jasonlfunk's comment) :
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => '[email protected]',
'name' => 'Test user',
'password' => 'testpassword',
]
]);
Request with POST files
$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 verbs usage with 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');
Async POST data
Usefull for long server operations.
$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();
}
);
Set headers
According to documentation, you can set headers :
// Set various headers on a request
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
]
]);
More information for debugging
If you want more details information, you can use debug
option like this :
$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
]);
Documentation is more explicits about new possibilities.
Solution 3
Note in Guzzle V6.0+, another source of getting the following error may be incorrect use of JSON as an array:
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.
Incorrect:
$response = $client->post('http://example.com/api', [
'body' => [
'name' => 'Example name',
]
])
Correct:
$response = $client->post('http://example.com/api', [
'json' => [
'name' => 'Example name',
]
])
Correct:
$response = $client->post('http://example.com/api', [
'headers' => ['Content-Type' => 'application/json'],
'body' => json_encode([
'name' => 'Example name',
])
])
Solution 4
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
'body' => json_encode($dataArray)
]);
$response = $request->getBody();
Add
openssl.cafile
in php.ini
file
Arsen
Updated on August 18, 2020Comments
-
Arsen over 3 years
How to make a post request with GuzzleHttp( version 5.0 ).
I am trying to do the following:
$client = new \GuzzleHttp\Client(); $client->post( 'http://www.example.com/user/create', array( 'email' => '[email protected]', 'name' => 'Test user', 'password' => 'testpassword' ) );
But I am getting the error:
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with the message 'No method can handle the email config key'
-
jasonlfunk over 8 yearsThis method is now deprecated in 6.0. Instead of 'body' use 'form_params'.
-
Jeremy Quinton over 8 yearsPassing 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.
-
Raheel almost 8 yearsHow can i send query string in post request ?
-
Samuel Dauzon almost 8 yearsWhat do you looking for ? If the query string is a part of URL, you have to add directly it in the URL like example.com/user/create?mode=dev".
-
Raheel almost 8 yearsI am trying to send post request to paypal with url encoded data. I think its ['body'] key.
-
marcostvz almost 8 yearsTo send query string in the post requests I've found better using 'query' option inside the params, because somehow in the url string it only took the 1st one docs.guzzlephp.org/en/latest/request-options.html#query
-
Madhur over 6 years@JeremyQuinton , so what you have selected intead of that...please reply
-
Jeremy Quinton over 6 years@madhur look at the answer below
-
a828h about 6 yearsplease edit the response and add this " This method is now deprecated in 6.0. Instead of 'body' use 'form_params' " to it
-
clockw0rk over 3 yearswhere are the headers?
-
Samuel Dauzon over 3 years@clockw0rk I added a HTTP headers part for you. You have the link to the doc