2017-06-09 11 views
0

私はすべてAPIキーを使用して設定されており、URLに基​​づいてGoogleセーフブラウジング[GSB]ステータスを取得するためのPHPサーバー側コードを書いています。 GSBルックアップAPIのバージョン4については、こちらをご参照ください。 - >https://developers.google.com/safe-browsing/v4/lookup-api#http-post-request私はテストとして私のサーバー上のコマンドラインからPHP-cURLライブラリとPHP 7を使用しています。私が送信しているPOSTの内容は、Google開発者サイトの例のとおりですが、URLを1つに限定してバージョン番号とURLからピリオドを削除しましたが(はい、URLが失敗することがわかります)自分の奇妙なエラーを生成するように見える:google safe browsing 4.0 APIは400のステータスを返します

{"client":{"clientId":"yourcompanyname","clientVersion":"152"},"threatInfo":{"threatTypes":["MALWARE","SOCIAL_ENGINEERING"],"platformTypes":["WINDOWS","threatEntryTypes":["URL"],"threatEntries":[{"url":"wwwurltocheck1org/"}]}} 

私はPHPのカールと、このエラーあちこち400のHTTPステータスリターンを得る:

"message": "Invalid JSON payload received. Unknown name \"{\"client\":{\"clientId\":\"yourcompanyname\",\"clientVersion\":\"152\"},\"threatInfo\":{\"threatTypes\":[\"MALWARE\",\"SOCIAL_ENGINEERING\"],\"platformTypes\":[\"WINDOWS\",\"threatEntryTypes\":[\"URL\"],\"threatEntries\":[{\"url\":\"wwwurltocheck1org/\"}]}}\": Cannot bind query parameter. Field '{\"client\":{\"clientId\":\"yourcompanyname\",\"clientVersion\":\"152\"},\"threatInfo\":{\"threatTypes\":[\"MALWARE\",\"SOCIAL_ENGINEERING\"],\"platformTypes\":[\"WINDOWS\",\"threatEntryTypes\":[\"URL\"],\"threatEntries\":[{\"url\":\"wwwurltocheck1org/\"}]}}' could not be found in request message.", 

私はそれが「不明な名前を」と言って、その後だと指摘します私のPOSTコンテンツ全体を、POSTコンテンツ全体が単一の「名前」として解釈されているかのように引用します。しかし、それは "クエリパラメータをバインドすることはできません"と言って、それが単一のフィールドだと思ったかのようにPOST POSTの内容を(もう一度)引用します。この文脈では "フィールド"とは何ですか?これは私に困ってしまった。でGSBのAPIを叩く

[Content-Type] => application/json 

を::

はい、私は、アプリケーション/ JSONヘッダを追加してい

[url] => https://safebrowsing.googleapis.com/v4/threatMatches:find?key=MY_KEY 

とPHP-カールが私に語ったことは、GSBサービスから戻ってJSONを受けました:

[content_type] => application/json; charset=UTF-8 

誰でもメッセージの意味を知っていますか? "無効なJSONペイロード..."と "クエリパラメータをバインドできません。" - 私はそれらに全く関係がありません。

答えて

0

余分な「\」でエラー応答を判断すると、必要がないときにjson文字列がエンコードされます。

つまり、$json = '{"key":"value"}';をjsonとして使用している場合は、その文字列にjson_encode($json);も適用されているようです。あなたはそれをする必要はありません - あなたはエンコーディングなしで文字列を使うことができます。その文字列はすでに正しい形式で処理されています。私はそれが何だったのかが助けになることを願っています!

+0

はい、それでした。 PHPが配列を文字列に変換するようにコードを修正し、正しく処理されました。私は必要のないjson_encode()を持っていました。 – Sky

関連する問題