2016-08-29 21 views
1

Google URL Shortener APIを使用します。今、JSON POSTリクエストをGoogle APIに送信する必要があります。Guzzle POST要求が機能しない

私は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

あなたは、Googleが、単純なGETパラメータを必要とするため、投稿しない(とあなたがボディタイプのどちらかを選択する必要があるので、あなたも、それを行うことはできません。form_paramsapplication/x-www-form-urlencoded体を作成し、bodyパラメータが生の体を作成)、form_paramsを必要としません。

だから、単にqueryform_paramsを置き換える:form_params`一部 `について

$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

あなたのコードはOKです。しかし、これを返すhttp://pastebin.com/rH8i9Cga –

+0

私はshorten_urlの部分が表示されません!!!! –

+1

レスポンスJSONがレスポンス本体にあります。それを見るには '$ res-> getBody() - > getContents()'を呼び出します。 –

-1

マニュアルでは、次の言葉:

あなたはAPIキーを取得したら、あなたのアプリケーションは、すべての要求URLにクエリパラメータキー= yourAPIKeyを追加することができます。

あなたのURLに `" key = $ google_api_key "を追加してみてください。

+0

そして、何を? –

関連する問題