import requests
import logging
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
requests.get('https://httpbin.org/headers')
9条答案
按热度按时间bttbmeg01#
一个简单的方法:在最新版本的请求(1. x和更高版本)中启用日志记录。
Requests使用
http.client
和logging
模块配置来控制日志详细程度,如下所述。演示
代码摘自链接的文档:
示例输出
wnavrhmk2#
r
是一个响应,它有一个request属性,里面有你需要的信息。r.request.headers
给出头:然后
r.request.data
将body作为Map。如果他们喜欢,你可以用urllib.urlencode
转换它:取决于响应的类型,
.data
-属性可能丢失,而.body
-属性替代地存在。idv4meu83#
您可以使用HTTP Toolkit来执行此操作。
如果您需要快速执行此操作,而不需要更改代码,则此方法特别有用:您可以从HTTPToolkit打开一个终端,从那里正常运行任何Python代码,您将能够立即看到每个HTTP/HTTPS请求的完整内容。
有一个免费的版本,可以做你需要的一切,它是100%开源的。
我是HTTP工具包的创建者;其实我自己建了它来解决完全相同的问题为我一段时间回来!我也试图调试一个支付集成,但他们的SDK不工作,我不知道为什么,我需要知道实际上是怎么回事,以正确地修复它。这是非常令人沮丧的,但能够看到原始流量真的很有帮助。
2sbarzqh4#
如果你使用的是Python 2.x,试着安装一个urllib2打开器,这样就可以打印出你的头文件了,尽管你可能需要把它和其他打开器结合起来,才能打开HTTPS。
34gzjxbg5#
调试HTTP本地请求的一种简单得多的方法是使用netcat。
您将开始侦听端口
1234
上的HTTP连接。在终端上,您将看到发送到端点的任何原始数据。例如:
sr4lhrrt6#
没有日志系统完全工作,(无论如何,从请求2.26开始,非常旧的版本可能有另一种行为)
好的解决方案是使用“挂钩”并在发生时打印详细信息。
这是相当好的解释在这里:https://findwork.dev/blog/advanced-usage-python-requests-timeouts-retries-hooks/
在“打印所有内容”下,
但如果链路中断,则此处是重要的部分
这一次的结果将是发送的查询和接收的响应的完整跟踪。
我已经用POST和大量的头文件成功地尝试了它:不要忘记pip安装请求_toolbelt。
rta7y2nd7#
之前的一个答案似乎被否决了,因为它以“没有什么是完全有效的”开始,然后提供了这样一个完美的解决方案:
1.使用
pip install requests-toolbelt
安装requests_toolbelt
实用程序集合。1.使用方法如下:
8yparm6h8#
verbose
配置选项可能允许您查看所需的内容。文档中有一个示例。**注意:**请阅读以下注解:详细配置选项似乎不再可用。
lskq00tm9#
正如其他人已经注意到的,有一个很好的
requests-toolbelt
模块,它有方便的函数来使用requests hook转储请求和响应内容。不幸的是(到目前为止)只有一个hook在成功完成一个请求时被调用。这并不总是一种情况。也就是说,请求可能以ConnectionError
或Timeout
异常结束。requests-toolbelt
模块本身也提供了公共函数来转储已完成的请求。然而,使用一些非公共API和Session子类,可以实现在发送之前记录请求,在接收之后记录响应。注:代码依赖于
requests-toolbelt
模块的实现细节/非公共API,因此在将来会出现意外中断:下面是一个用法示例:
第一次