我想使用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;
但它返回以下错误:
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文档和许多其他资源但没有帮助!
答案 0 :(得分:1)
您不需要form_params
,因为Google需要简单的GET参数,而不是POST(您甚至不能这样做,因为您必须在体型之间进行选择:form_params
创建{ {1}} body,application/x-www-form-urlencoded
参数创建原始主体。)
只需将body
替换为form_params
:
query
答案 1 :(得分:0)
我无法发出发帖请求,情况不完全相同,但是我在这里写了我的解决方案,以防有人帮忙:
我需要发送一个带有类似'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'
]
]);
这样做,结果就是我所期望的。
答案 2 :(得分:-1)
手册说明如下:
获得API密钥后,您的应用程序可以将查询参数key = yourAPIKey附加到所有请求URL。
尝试将“key = $ google_api_key”附加到您的网址。