Жрет POST-запрос не работает

Я хотел бы использовать 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 и многие другие ресурсы, но это не помогло!

1

Решение

Вам не нужно 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);
1

Другие решения

В руководстве сказано следующее:

После того, как у вас есть ключ API, ваше приложение может добавить параметр запроса key = yourAPIKey ко всем URL-адресам запроса.

Попробуйте добавить `» key = $ google_api_key «к вашему URL.

-1

По вопросам рекламы [email protected]