【问题标题】:Grequests with multiple JSON payloads具有多个 JSON 有效负载的请求
【发布时间】:2017-05-16 19:35:03
【问题描述】:

我正在尝试同时发送多个带有 JSON 有效负载的 POST 请求并检索 JSON 结果。我已经阅读了其他一些关于 SO 的帖子,但没有任何效果。

def transcribe(vid_segs):
   payloads = []
   for vid in vid_segs:
      vid = base64.b64encode(open(vid).read())
      payload = {
      "config": {
            "encoding": "LINEAR16",
            "sampleRateHertz": 16000,
            "languageCode": "en-US",
            "speechContexts": {
                "phrases:": ["Barack", "Obama", "Barack Obama"]
            }
        },
        "audio": {
            "content": vid
        }
    }
    payloads.append(payload)

   url = "https://speech.googleapis.com/v1/speech:recognize?key=MYAPIKEY"
   unsent_request = []
   for payload_single in payloads:
      unsent_request.append(grequests.get(url,
                                        params=payload_single))
   responses = grequests.map(unsent_request)
   for response in responses:
      print response.json()
      response.close()

如果我使用 response.json(),它会返回错误:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

如果我尝试使用 response.json,返回的不是实际的 JSON 内容,只是对象详细信息和响应代码:

<bound method Response.json of <Response [404]>>

有什么想法吗?提前致谢!

【问题讨论】:

  • 首先引起我注意的是 404,也许 URL 是……错误、格式错误或不完整?只发送 1 个有效载荷有效吗?看到你得到一个 JSONDecodeError 可能是因为响应不是 JSON(这似乎是合理的看到 404),尝试以其他方式调试/查看 response 对象(打印,目录,.. 或只使用调试器:pdb 或者你的 IDE 可以提供的任何东西)

标签: python json google-api python-requests grequests


【解决方案1】:

response.json 是一个方法,所以你需要调用它:response.json()JSONDecodeError 告诉您响应不是有效的 JSON。尝试打印response.text(作为文本的响应)或response.content(二进制响应)来查看响应的实际内容。

正如@Lohmar ASCHAR 在评论中指出的那样,您得到的是 404,因此您没有得到 JSON 可能并不奇怪。

更多回复:http://docs.python-requests.org/en/master/user/quickstart/#response-content

【讨论】:

  • 感谢布赖恩和@Lohmar。您对 404 代码是正确的 - 它实际上并没有从 API 获得响应。所以我想这个问题真的应该是关于我对一般请求的处理方式。我已经验证了 URL 和参数的一切都很好 - 如果我一次尝试一个,它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多