0

我已经设置了一个 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 有效负载...”和“无法绑定查询参数”。- 我根本无法与他们联系。

4

2 回答 2

0

从您带有额外“\”的错误响应来看,当您不需要时,您正在编码您的 json 字符串。

即如果你有$json = '{"key":"value"}';你的json,看起来你也适用json_encode($json);于那个字符串。您不需要这样做 - 您可以只使用没有编码的字符串,因为它已经以正确的格式进行处理。我希望那是过去的,并且是有帮助的!

于 2017-10-24T06:03:17.693 回答
0

看来,在您的 JSON 中,platformTypes没有右方括号。

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

于 2018-03-13T18:11:39.153 回答