PHP GuzzleHttp。如何使用参数发出 post 请求?
PHP GuzzleHttp. How to make a post request with params?
如何使用 GuzzleHttp(版本 5.0)发出 post 请求。
我正在尝试执行以下操作:
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
);
但我收到错误消息:
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with the message 'No method can handle the email config key'
试试这个
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'form_params' => array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
)
);
由于 Marco 的回答已弃用,您必须使用以下语法(根据 jasonlfunk 的评论):
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'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 动词与参数一起使用
// PUT
$client->put('http://www.example.com/user/4', [
'body' => [
'email' => 'test@gmail.com',
'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' => 'test@gmail.com',
'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();
}
);
设置headers
根据documentation,可以设置headers:
// Set various headers on a request
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
]
]);
更多调试信息
如果您需要更多详细信息,可以使用 debug
选项,如下所示:
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
],
// If you want more informations during request
'debug' => true
]);
Documentation 更明确地说明了新的可能性。
请注意,在 Guzzle 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',
])
])
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
'body' => json_encode($dataArray)
]);
$response = $request->getBody();
添加
openssl.cafile
在 php.ini
文件中
如何使用 GuzzleHttp(版本 5.0)发出 post 请求。
我正在尝试执行以下操作:
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
);
但我收到错误消息:
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with the message 'No method can handle the email config key'
试试这个
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'form_params' => array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
)
);
由于 Marco 的回答已弃用,您必须使用以下语法(根据 jasonlfunk 的评论):
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'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 动词与参数一起使用
// PUT
$client->put('http://www.example.com/user/4', [
'body' => [
'email' => 'test@gmail.com',
'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' => 'test@gmail.com',
'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();
}
);
设置headers
根据documentation,可以设置headers:
// Set various headers on a request
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
]
]);
更多调试信息
如果您需要更多详细信息,可以使用 debug
选项,如下所示:
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
],
// If you want more informations during request
'debug' => true
]);
Documentation 更明确地说明了新的可能性。
请注意,在 Guzzle 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',
])
])
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
'body' => json_encode($dataArray)
]);
$response = $request->getBody();
添加
openssl.cafile
在 php.ini
文件中