【问题标题】:google safe browsing 4.0 API returns 400 status谷歌安全浏览 4.0 API 返回 400 状态
【发布时间】:2017-06-09 01:11:30
【问题描述】:

我已经设置了一个 API 密钥,并编写了 PHP 服务器端代码来根据 URL 获取 Google 安全浏览 [GSB] 状态。此处描述了 GSB 查找 API 的第 4 版 -> https://developers.google.com/safe-browsing/v4/lookup-api#http-post-request 。我在服务器上的命令行中使用 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/"}]}}

我从 php-curl 得到一个 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 内容,就好像它认为它是一个单独的字段一样。在这种情况下,什么是“领域”?这让我很难过。

是的,我正在添加 application/json 标头:

[Content-Type] => application/json

在以下位置点击 GSB API:

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

而 php-curl 告诉我它从 GSB 服务收到了 JSON:

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

有人知道这些消息是什么意思吗? “无效的 JSON 有效负载...”和“无法绑定查询参数”。 - 我和他们完全没有关系。

【问题讨论】:

    标签: php http-status-code-400 safe-browsing


    【解决方案1】:

    根据您的错误响应以及额外的“\”来判断,您在不需要时对您的 json 字符串进行编码。

    即,如果您将$json = '{"key":"value"}'; 作为您的json,那么您似乎也在将json_encode($json); 应用于该字符串。您不需要这样做 - 您可以只使用没有编码的字符串,因为它已经以正确的格式进行处理。我希望这就是它曾经的样子并且对我有帮助!

    【讨论】:

    • 是的,就是这样。我更正了我的代码,只让 PHP 将数组转换为字符串,并且得到了正确处理。我有一个不需要的 json_encode()。
    【解决方案2】:

    在您的 JSON 中,platformTypes 似乎没有右方括号。

    你有 "platformTypes":["WINDOWS","threatEntryTypes":.... "WINDOWS"之后应该有一个']'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2021-06-22
      • 2018-07-14
      • 2017-09-28
      相关资源
      最近更新 更多