在使用该requests模块时,有没有办法打印原始 HTTP 请求?
我不想只获取标头,我想要请求行、标头和内容打印输出。能否查看 HTTP 请求最终构建的内容?
是的,在使用 requests
模块时,你可以打印出原始的 HTTP 请求,包括请求行、标头和内容。虽然 requests
模块本身没有直接提供打印完整原始请求的功能,但可以通过以下方法实现。
requests-toolbelt
工具requests-toolbelt
库提供了一个 dump
工具,可以方便地打印出完整的请求和响应内容,包括请求行、标头和内容。
requests-toolbelt
:首先,你需要安装该库:
pip install requests-toolbelt
然后,你可以使用如下代码打印完整的请求信息:
import requests
from requests_toolbelt.utils import dump
# 示例请求
url = "https://httpbin.org/post"
data = {"key": "value"}
response = requests.post(url, data=data)
# 打印原始请求和响应
request_data = dump.dump_all(response)
# 输出 HTTP 请求和响应
print(request_data.decode('utf-8'))
这段代码会打印出完整的 HTTP 请求和响应,包括请求行、标头和内容。
PreparedRequest
打印原始请求另一种方法是使用 PreparedRequest
对象。通过创建一个请求并使用 requests.Session().prepare_request()
方法准备请求,然后打印出请求的相关字段。
import requests
# 创建一个会话
session = requests.Session()
# 创建一个 Request 对象
req = requests.Request('POST', 'https://httpbin.org/post', data={'key': 'value'})
# 准备请求 (构建最终的原始请求)
prepared = session.prepare_request(req)
# 打印原始请求
print(f'{prepared.method} {prepared.url} HTTP/1.1')
for header, value in prepared.headers.items():
print(f'{header}: {value}')
print(f'\n{prepared.body}')
在这段代码中:
- Request
对象用于创建请求。
- 通过 session.prepare_request(req)
构建原始请求。
- 最后,打印出 method
, url
, headers
和 body
来构建完整的 HTTP 请求。
requests
库中可以通过开启调试模式,利用 logging
模块来查看请求的详细内容:
import requests
import logging
# 开启调试日志
logging.basicConfig(level=logging.DEBUG)
# 发送请求
response = requests.post('https://httpbin.org/post', data={'key': 'value'})
通过这种方法,requests
模块的调试日志会输出请求的详细信息,包括请求行、标头和内容。
requests-toolbelt
库,通过 dump
工具获取原始请求。PreparedRequest
对象,手动打印构建的 HTTP 请求。logging
模块开启调试日志,输出请求的详细内容。这几种方法都可以帮助你查看 requests
模块最终构建的 HTTP 请求的完整内容。