Я хотел бы использовать Google URL Shortener API. Теперь мне нужно отправить запрос JSON POST в Google API.
Я использую Guzzle 6.2 в PHP.
Вот что я пробовал до сих пор:
$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 и многие другие ресурсы, но это не помогло!
Вам не нужно form_params
потому что Google требует простой параметр GET, а не POST (и вы даже не можете этого сделать, потому что вам приходится выбирать между типами телосложения: form_params
создает application/x-www-form-urlencoded
тело и 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);
В руководстве сказано следующее:
После того, как у вас есть ключ API, ваше приложение может добавить параметр запроса key = yourAPIKey ко всем URL-адресам запроса.
Попробуйте добавить `» key = $ google_api_key «к вашему URL.