python - Python 获取 http 预告片
问题描述
如何使用 python 获取 HTTP 预告片响应标头?我正在使用requests.get
,但无法获得某些 X-Content-Type 或 X-Status。但是,当我使用curl
with时-i
,我得到了这些响应。我需要发送特定的标头或参数吗?我尝试发送TE: trailers
,但它似乎没有做任何事情。
一些示例代码:
import requests
url = "some_api_endpoint"
params = {"param1": "val1"}
headers = {"Accept": "application/json", "TE": "trailers"}
response = requests.get(url, params=params, headers=headers, verify=False)
print("Status: {}".format(response.status_code))
print("Content: {}".format(response.content.decode('utf-8')))
print("Headers: {}".format(response.headers))
print("Reason: {}".format(response.reason))
输出:
Status: 200
Content:
Headers: {'Connection': 'close', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked'}
Reason: OK
卷曲命令
curl -k -i <url>?<params> -H 'Accept: application/json'
输出:
TP/1.1 200 OK
Connection: close
Content-Type: application/json
Transfer-Encoding: chunked
X-Status: Some Error
我想从 python中获取Some Error
甚至是上面的标题。X-Status
基本上是从服务器获得 200 并且在流式传输一些响应时,它在中间遇到错误,导致错误。不幸的是,我无法在 python 中轻松收到此消息。
解决方案
来自https://www.python.org/dev/peps/pep-0444/#request-trailers-and-chunked-transfer-encoding
请求预告片和分块传输编码
当对请求内容使用分块传输编码时,RFC 允许存在请求尾。这些类似于请求标头,但位于最终的空数据块之后。这些预告片仅在分块数据流的长度有限并且已全部读入时才可用。WSGI 和 Web3 目前都不支持它们。
关于requests库,没有比这更好的了:
如前所述,Trailers 是一个很少使用的 HTTP 功能。
实现起来非常复杂(因为您必须确保在此处不解析任何会改变正文大小的标头,例如 Content-Length 和 Transfer-encoding)。
因此,它们实际上是少数实现预告片的解析器,并且现在很少出现在 HTTP 消息中(但你有一个,为你感到抱歉:-))。
推荐阅读
- liferay - Liferay 7.3:如何在由管理员控制的主题中制作菜单项
- sass - 如何在 sass 中动态创建颜色变量
- python - 在 PyGame 中使用 GIF
- c++ - C++ 位移在相反方向上具有相同的常数,具有不同的结果与较小的代码更改
- browser - 从哪里获得预构建的 Chromium 以轻松进行修改?
- python - 如何在python中使用mysql.connector时回收mysql连接
- android - 如何将可绘制资产作为整数返回?
- linux - 如果文件归特定用户所有,则删除文件
- vuejs2 - vue.js 2 输入数字和百分比如何绑定模型
- jquery - 如何在ajax中以表格格式添加if语句?