API безопасного просмотра Google 4.0 возвращает статус 400
Я все настроил с помощью ключа API и написал PHP-код на стороне сервера для получения статуса безопасного просмотра Google [GSB] на основе URL. Версия 4 API поиска GSB описана здесь -> https://developers.google.com/safe-browsing/v4/lookup-api. Я использую библиотеку PHP-cURL и PHP 7 из командной строки на моем сервере в качестве теста. Содержимое POST, которое я отправляю, прямо из примера на сайте разработчиков Google, хотя я сократил его только до одного URL и удалил точки из номера версии и URL (да, я знаю, что URL потерпит неудачу), потому что они кажется, генерируют свои собственные странные ошибки:
{"client":{"clientId":"yourcompanyname","clientVersion":"152"},"threatInfo":{"threatTypes":["MALWARE","SOCIAL_ENGINEERING"],"platformTypes":["WINDOWS","threatEntryTypes":["URL"],"threatEntries":[{"url":"wwwurltocheck1org/"}]}}
Я получаю возврат HTTP-статуса 400 от php-curl и эту ошибку:
"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 интерпретируется как одно "имя". Но затем он говорит: "Невозможно связать параметр запроса" и цитирует (снова) содержимое whold POST, как если бы он думал, что это одно поле. Что такое "поле" в этом контексте? Это поставило меня в тупик.
Да, я добавляю заголовок application/json:
[Content-Type] => application/json
Ударяя API GSB в:
[url] => https://safebrowsing.googleapis.com/v4/threatMatches:find?key=MY_KEY
И php-curl сообщает, что получил JSON от службы GSB:
[content_type] => application/json; charset=UTF-8
Кто-нибудь знает, что означают эти сообщения? "Недопустимая полезная нагрузка JSON..." и "Невозможно связать параметр запроса". - Я не могу относиться к ним вообще.
2 ответа
Судя по вашему ответу на ошибку с дополнительным знаком "\", вы кодируете строку json, когда вам это не нужно.
т.е. если у вас есть $json = '{"key":"value"}';
как ваш JSON, похоже, вы также подаете заявку json_encode($json);
к этой строке. Вам не нужно этого делать - вы можете просто использовать строку без кодировки, так как она уже в правильном формате для обработки. Я надеюсь, что это то, что было и полезно!
Похоже, что в вашем JSON, platformTypes
не имеет закрытой квадратной скобки.
Ты имел "platformTypes":["WINDOWS","threatEntryTypes":....
Там должно быть ']' после "WINDOWS"
,