【问题标题】:Capturing Response Body for a HTTP Error in python在 python 中捕获 HTTP 错误的响应正文
【发布时间】:2021-04-29 14:41:59
【问题描述】:

需要在 python 中捕获 HTTP 错误的响应正文。当前使用 python 请求模块的 raise_for_status()。该方法只返回状态码和描述。需要一种方法来捕获响应正文以获取详细的错误日志。

如果某些不同的模块中存在类似的必需功能,请建议 python requests 模块的替代方案。如果没有,请建议可以对现有代码进行哪些更改以捕获所述响应正文。

当前的实现只包含以下内容:

resp.raise_for_status()

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    我想我会很快写下来。这对我来说很好用:

    try:
      r = requests.get('https://www.google.com/404')
      r.raise_for_status()
    except requests.exceptions.HTTPError as err:
      print(err.request.url)
      print(err)
      print(err.response.text)
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作,以 unicode 格式返回响应的内容。

      response.text
      

      try:
          r = requests.get('http://www.google.com/nothere')
          r.raise_for_status()
      except requests.exceptions.HTTPError as err:
          print(err)
          sys.exit(1) 
      # 404 Client Error: Not Found for url: http://www.google.com/nothere
      

      您将在此处获得有关如何处理异常的完整说明。请查看Correct way to try/except using Python requests module?

      【讨论】:

      • 为了更清楚地说明这一点,也许遗漏了什么:错误对象具有.request.response 属性,可以轻松获取传输详细信息。 err.response.content 是我们所需要的。
      【解决方案3】:

      如果resp.status_code >= 400,您可以登录resp.text

      【讨论】:

        【解决方案4】:

        您可以选择一些工具,例如 Fiddler、Charles、wireshark。

        但是,这些工具可以只显示响应的主体,而不包括引发错误的原因或错误堆栈。

        【讨论】:

          猜你喜欢
          • 2019-06-18
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 1970-01-01
          • 2023-03-05
          • 2011-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多