- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这几天我在使用 Google Sheet API 时遇到问题,我可以从 Requests(通过 requests_oauthlib 扩展)获得的所有响应消息都是 header 和 400 Bad Request
。请求版本为 2.19.1
。这发生在多个端点 (v4
) 上,例如 spreadsheets.values.append
、spreadsheets.values.batchUpdate
、spreadsheets.values。更新
等
我已经浪费了数小时来确保我已经形成了正确的数据结构但无济于事,直到那时我才意识到我没有从 API 服务器获得完整的响应消息。
从 r = request.Request('https://httpbin.org')
返回的 requests.Response
对象似乎来自 requests.HTTPAdapter
对象,它又是 urllib3.response.HTTPResponse
的包装器。所以我尝试使用 r.reason
, r.raw._original_response
, r.raw._body
, r.raw.msg
除了对象引用 & 无
(或只是空字符串)。
长话短说,我放弃了一段时间,当我重新开始时,我意识到我应该尝试使用我一直忽略的 Google 的 API 资源管理器,结果是是响应中的错误消息,并且 400 错误不是由于任何错误的有效负载/数据结构形式造成的。
{ "error": {
"code": 400,
"message": "Invalid data[0]: Requested writing within range [mysheet!A3:AH3], but tried writing to row [4]",
"status": "INVALID_ARGUMENT" }
}
我的问题是:
我在调试来自请求的连接响应方面是否有误?实际上有一种方法可以在请求中从服务器获取完整的原始消息,例如 curl 中的完整 Debug模式?还是仅当 API 请求来自 Google API 资源管理器时才发送此消息?
最佳答案
您要查找的错误消息位于响应正文中。这可以通过 response.text
(或 response.json()
,因为特定的正文是 JSON)来访问。如果,正如您的 self 回答所暗示的那样,您想从 raise_for_status()
引发的异常中获取主体,您可以通过异常的 response
属性:exception.response.text
或 exception.response.json()
。
关于python-requests - 如何在请求(或 urllib3.response)中获取完整的服务器响应消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370401/
我是一名优秀的程序员,十分优秀!