如何在不发送请求的情况下查看POST请求内容并生成curl命令
不发送请求查看requests请求内容的方法
你要找的这种“不发请求就查看请求细节”的需求,requests本身没有直接叫foobar的方法,但有两种实用方案:
1. 构造PreparedRequest查看原始请求细节
requests发送请求前,会先把请求封装成PreparedRequest对象,你可以手动构造这个对象,直接查看所有请求参数,不用真的发请求:
import requests api_key = 'asdfklhsdfkjahsdlgkjahlkdjahfsa' url = 'https://www.website.com' headers = {'api-key': api_key, 'Content-Type': 'application/json'} request_data = {'foo': 'bar', 'egg': 'spam'} # 构造Request对象 req = requests.Request('POST', url, headers=headers, data=request_data) # 准备成可发送的请求对象(但不发送) prepped = req.prepare() # 查看请求细节 print('请求URL:', prepped.url) print('请求头:', prepped.headers) print('请求体:', prepped.body)
这个prepped对象包含了最终要发送的所有内容,你可以直接打印或输出各个属性来检查。
2. 生成可直接执行的curl命令
如果想直接生成curl命令字符串,有两种方式:
- 手动拼接:根据请求参数自己拼curl命令,但要注意转义特殊字符,比如引号。
- 用现成工具:可以用
requests-toolbelt库中的工具(需要先pip install requests-toolbelt安装),它能直接把PreparedRequest对象转成curl命令:
import requests from requests_toolbelt.utils import dump api_key = 'asdfklhsdfkjahsdlgkjahlkdjahfsa' url = 'https://www.website.com' headers = {'api-key': api_key, 'Content-Type': 'application/json'} request_data = {'foo': 'bar', 'egg': 'spam'} req = requests.Request('POST', url, headers=headers, data=request_data) prepped = req.prepare() # 生成curl命令 curl_cmd = dump.dump_all(prepped, request_prefix=False).decode('utf-8') print(curl_cmd)
执行后会输出完整的curl命令,你可以直接复制到终端执行。
内容的提问来源于stack exchange,提问作者Frank Harris
相关产品推荐
相关产品推荐

