2016-08-29 3 views
1

Ich möchte Google URL Shortener API verwenden. Jetzt muss ich eine JSON POST-Anfrage an die Google API senden.Guzzle POST Anfrage funktioniert nicht

Ich benutze Guzzle 6.2 in PHP. Hier

ist, was ich versucht habe, so weit:

$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; 

Aber es gibt folgende Fehlermeldung:

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...) 

Jeder würde geschätzt hilft. Ich habe Guzzle Dokument und viele andere Ressourcen gelesen aber nicht geholfen!

Antwort

1

Sie nicht form_params brauchen, weil Google einfache GET-Parameter erfordert, nicht POST (und das kann man nicht einmal tun, weil Sie zwischen Körpertypen wählen müssen: form_params schafft application/x-www-form-urlencoded Körper und body Parameter erstellt Rohkarosse) .

So ersetzen Sie einfach form_params mit 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); 
+0

Ihr Code ist OK. Aber gibt diese http://pastebin.com/rH8i9Cga –

+0

Ich sehe nicht shorte_url Teil !!!! –

+1

Antwort JSON befindet sich im Antworttext. Rufen Sie '$ res-> getBody() -> getContents()' auf, um es zu sehen. –

-1

Das Handbuch sagt der folgende:

Nachdem Sie einen API-Schlüssel haben, die Anwendung die Abfrageparameter Schlüssel anhängen = yourAPIKey auf alle Anforderungs-URLs.

Versuchen Sie, "key = $ google_api_key" an Ihre URL anzufügen.

+0

Und was 'form_params' Teil? –