Как исправить ошибку «Получено недопустимое содержимое JSON. Неизвестное имя» - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь получить правильный ответ от API безопасного просмотра Google v4. Хотя я получаю сообщение об ошибке «Получено недопустимое содержимое JSON. Неизвестное имя».

Я использовал полезную нагрузку на основе примера полезной нагрузки, упомянутого в https://developers.google.com/safe-browsing/v4/lookup-api

У меня проблемы с полезной нагрузкой. Я думаю, что это должна быть строка, а не настоящий диктат. Когда я использую dict, я получаю сообщение об ошибке: TypeError: имеет тип, но ожидается одно из: str, unicode

Код, который я использовал:

result = urlfetch.fetch(url, method=urlfetch.POST, payload=payload)

URL-адрес (с помощью [api-key], конечно, мой api-ключ):

https://safebrowsing.googleapis.com/v4/threatMatches:find?key=[api-key]

Полезная нагрузка - следующая строка (не Python dict):

{
  "client": { 
     "clientId": "myproject", 
     "clientVersion": "42" }, 
  "threatInfo": { 
     "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING"], 
     "platformTypes": ["WINDOWS"], 
     "threatEntryTypes": ["URL"], 
     "threatEntries": [ {"url":"http://www.example.com/"} ] } 
}

В качестве вывода я ожидал некоторый JSON, который указывает, что этот URL безопасен. Однако я получаю следующий результат:

{ 
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"{\n    \"client\": {\n      \"clientId\":      \"myproject\",\n      \"clientVersion\": \"42\"\n    },\n    \"threatInfo\": {\n      \"threatTypes\":      [\"MALWARE\", \"SOCIAL_ENGINEERING\"],\n      \"platformTypes\":    [\"WINDOWS\"],\n      \"threatEntryTypes\": [\"URL\"],\n      \"threatEntries\": [\n        {\"url\":\"http://www.example.com/\"}\n      ]\n    }\n  }\": Cannot bind query parameter. Field '{\n    \"client\": {\n      \"clientId\":      \"myproject\",\n      \"clientVersion\": \"42\"\n    },\n    \"threatInfo\": {\n      \"threatTypes\":      [\"MALWARE\", \"SOCIAL_ENGINEERING\"],\n      \"platformTypes\":    [\"WINDOWS\"],\n      \"threatEntryTypes\": [\"URL\"],\n      \"threatEntries\": [\n        {\"url\":\"http://www' could not be found in request message.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": [similar as the message above]
          }
        ]
      }
    ]
  }
}

Есть идеи, что не так?

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2019

urlfetch должен содержать тип содержимого HEADER: application / json

result = urlfetch.fetch(url, method=urlfetch.POST, payload=payload, headers={'Content-Type': 'application/json'})
...