Guzzle POST 请求无效
Guzzle POST request not working
我想使用 Google URL Shortener API。现在,我需要向 Google API.
发送 JSON POST 请求
我在 PHP 中使用 Guzzle 6.2。
这是我目前尝试过的方法:
$client = new GuzzleHttp\Client();
$google_api_key = 'AIzaSyBKOBhDQ8XBxxxxxxxxxxxxxx';
$body = '{"longUrl" : "http://www.google.com"}';
$res = $client->request('POST', 'https://www.googleapis.com/urlshortener/v1/url', [
'headers' => ['Content-Type' => 'application/json'],
'form_params' => [
'key'=>$google_api_key
],
'body' => $body
]);
return $res;
但它 returns 以下错误:
Client error: `POST https://www.googleapis.com/urlshortener/v1/url` resulted in a `400 Bad Request` response:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "parseError",
"message": "Parse Error"
}
(truncated...)
如有任何帮助,我们将不胜感激。我已阅读 Guzzle 文档和许多其他资源,但没有帮助!
手册是这样说的:
After you have an API key, your application can append the query parameter key=yourAPIKey to all request URLs.
尝试将 `"key=$google_api_key" 附加到您的 URL。
你不需要 form_params
,因为 Google 需要简单的 GET 参数,而不是 POST(你甚至不能那样做,因为你必须在 body 类型:form_params
创建 application/x-www-form-urlencoded
body,body
参数创建原始 body).
所以只需将 form_params
替换为 query
:
$res = $client->request('POST', 'https://www.googleapis.com/urlshortener/v1/url', [
'headers' => ['Content-Type' => 'application/json'],
'query' => [
'key' => $google_api_key
],
'body' => $body
]);
// Response body content (JSON string).
$responseJson = $res->getBody()->getContents();
// Response body content as PHP array.
$responseData = json_decode($responseJson, true);
我无法提出 post 请求,情况不完全相同,但我在这里写下我的解决方案以防万一帮助某人:
我需要用这样的密钥发送 post 请求 'request_data',我试图按照 Guzzle 文档所说的那样做:
$r = $client->request('PUT', 'http://test.com', [
'form_data' => ['request_data' => 'xxxxxxx']
]);
结果是这样的:
{'request_data':....}
但我想要的是这样的:
'request_data': {}
所以我最终弄明白了是这样做的:
$client = new Client();
$response = $client->request('POST', $url, [
'body' => "request_data=" . json_encode([$yourData]),
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
]);
这样一来,结果就是我所期望的。
我想使用 Google URL Shortener API。现在,我需要向 Google API.
发送 JSON POST 请求我在 PHP 中使用 Guzzle 6.2。
这是我目前尝试过的方法:
$client = new GuzzleHttp\Client();
$google_api_key = 'AIzaSyBKOBhDQ8XBxxxxxxxxxxxxxx';
$body = '{"longUrl" : "http://www.google.com"}';
$res = $client->request('POST', 'https://www.googleapis.com/urlshortener/v1/url', [
'headers' => ['Content-Type' => 'application/json'],
'form_params' => [
'key'=>$google_api_key
],
'body' => $body
]);
return $res;
但它 returns 以下错误:
Client error: `POST https://www.googleapis.com/urlshortener/v1/url` resulted in a `400 Bad Request` response:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "parseError",
"message": "Parse Error"
}
(truncated...)
如有任何帮助,我们将不胜感激。我已阅读 Guzzle 文档和许多其他资源,但没有帮助!
手册是这样说的:
After you have an API key, your application can append the query parameter key=yourAPIKey to all request URLs.
尝试将 `"key=$google_api_key" 附加到您的 URL。
你不需要 form_params
,因为 Google 需要简单的 GET 参数,而不是 POST(你甚至不能那样做,因为你必须在 body 类型:form_params
创建 application/x-www-form-urlencoded
body,body
参数创建原始 body).
所以只需将 form_params
替换为 query
:
$res = $client->request('POST', 'https://www.googleapis.com/urlshortener/v1/url', [
'headers' => ['Content-Type' => 'application/json'],
'query' => [
'key' => $google_api_key
],
'body' => $body
]);
// Response body content (JSON string).
$responseJson = $res->getBody()->getContents();
// Response body content as PHP array.
$responseData = json_decode($responseJson, true);
我无法提出 post 请求,情况不完全相同,但我在这里写下我的解决方案以防万一帮助某人:
我需要用这样的密钥发送 post 请求 'request_data',我试图按照 Guzzle 文档所说的那样做:
$r = $client->request('PUT', 'http://test.com', [
'form_data' => ['request_data' => 'xxxxxxx']
]);
结果是这样的:
{'request_data':....}
但我想要的是这样的:
'request_data': {}
所以我最终弄明白了是这样做的:
$client = new Client();
$response = $client->request('POST', $url, [
'body' => "request_data=" . json_encode([$yourData]),
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
]);
这样一来,结果就是我所期望的。