如何使用 Python 请求打印原始 HTTP 请求?

Patricia Arquette
发布: 2024-10-23 12:09:30
原创
578 人浏览过

How to Print Raw HTTP Requests Using Python Requests?

使用 Python 请求打印原始 HTTP 请求

Python Requests 库简化了 HTTP 请求,但了解原始 HTTP 请求对于调试非常有价值和分析。本文探讨如何访问和打印完整的 HTTP 请求,包括请求行、标头和内容。

以前,提取原始请求需要访问请求属性,该属性仅提供标头。但是,在版本 1.2.3 中,Requests 引入了PreparedRequest 对象,该对象封装了将发送到服务器的确切字节。

要使用PreparedRequest,请创建一个请求对象并使用prepare() 方法。为了清晰起见,可以对输出进行美化:

<code class="python">import requests

# Create a request
req = requests.Request('POST', 'http://stackoverflow.com', headers={'X-Custom': 'Test'}, data='a=1&b=2')

# Prepare the request (encodes it to bytes)
prepared = req.prepare()

# Define a function to prettify the POST request
def pretty_print_POST(req):
    """Prints the request in a human-readable format."""
    print('{}\n{}\r\n{}\r\n\r\n{}'.format(
        '-----------START-----------',
        req.method + ' ' + req.url,
        '\r\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
        req.body,
    ))

# Prettify the prepared request
pretty_print_POST(prepared)

# Send the actual request using a Session object
s = requests.Session()
s.send(prepared)</code>
登录后复制

此代码将完整的 HTTP 请求打印为:

-----------START-----------
POST http://stackoverflow.com/
Content-Length: 7
X-Custom: Test

a=1&b=2
登录后复制

此方法允许检查发送到服务器的请求,从而方便调试和理解请求-响应生命周期。

以上是如何使用 Python 请求打印原始 HTTP 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!