PHP-GuzzleHttp。如何使用params发出post请求?
如何使用GuzzleHttp(5.0版)发出post请求 我正在努力做到以下几点:PHP-GuzzleHttp。如何使用params发出post请求?,php,request,httpclient,guzzle,Php,Request,Httpclient,Guzzle,如何使用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' => 't
$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
);
但我得到了一个错误:
PHP致命错误:未捕获异常“InvalidArgumentException”,消息为“没有方法可以处理电子邮件配置键”
试试这个
$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的评论): 使用POST文件请求 带params的REST动词用法 异步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();
}
);
设置标题
根据,可以设置标题:
// 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
]);
更多关于新可能性的说明。注意,在Guzzle V6.0+中,另一个导致以下错误的原因可能是不正确地使用JSON作为数组: 将“body”请求选项作为数组传递以发送帖子 请求已被否决。请使用“表格参数”请求 发送应用程序/x-www-form-urlencoded请求的选项,或 “多部分”请求选项,用于发送多部分/表单数据请求 不正确:
$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',
])
])
正确:
$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',
])
])
正确:
$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',
])
])
加
openssl.cafile
在php.ini
文件中此方法现在在6.0中被弃用。不使用“body”而使用“form_params”。不推荐将“body”请求选项作为数组传递以发送POST请求。请使用“form_params”请求选项发送应用程序/x-www-form-urlencoded请求,或使用“multipart”请求选项发送多部分/表单数据请求。@JeremyQuinton,那么您选择的intead…请reply@madhur查看下面的答案,请编辑响应并添加此选项“此方法现在在6.0中被弃用。不要使用“body”而使用“form_params”“to i如何在post请求中发送查询字符串?您在寻找什么?如果查询字符串是URL的一部分,您必须直接将其添加到URL中,如”。我正在尝试使用URL编码的数据向paypal发送post请求。我认为它是['body']键。为了在post请求中发送查询字符串,我发现在参数中使用'query'选项更好,因为不知怎的,在url字符串中只使用了第一个@clockw0rk,我为您添加了一个HTTP头部分。你有这个文件的链接