GoogleAPIがcurlで上手く通らない時は、file_get_contents使おう
2017-10-14 2017-10-16
PHPから「Google Maps Distance Matrix API」を利用しようと思った際に軽ハマりしたのでメモ。
いつも通りcurlでGoogleのAPIを使おうとしたところ、INVALID_REQUESTエラー。厄介なのは、レスポンスが200で帰ってきてしまっている点。INVALID_REQUESTエラーはパラメーター設定ミスなどで返ってくるエラーですが、どうもそういうことではない模様。
ということで一通り苦しんだ後、file_get_contentsに変えたらすんなり通ったのでその共有です。
駄目なパターン
1 2 3 4 5 6 7 8 |
$curl = curl_init($url); curl_setopt_array($curl, array( CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, )); $response = curl_exec($curl ); $response = json_decode($response); |
これは全然通りません。レスポンスでは200 OKが返ってくるものの、中身はINVALID_REQUESTエラー。
これならOK
1 2 |
$response = file_get_contents($url.'?'.http_build_query($params, '', '&')); $response = json_decode($response); |
「原因をちゃんと解明していない!」と怒る人もいそうですが、外部のサービスなんだから正しいレスポンスが取れれば良いんです。
暇になったら、Googleが何を弾いているのか調査してみたいと思います。