Python Requests通过SSL发送GET/POST数据时响应被截断问题
Requests发送带数据的HTTPS请求时响应被截断问题
复现方式
首先创建app.py文件,代码如下:
from flask import Flask app = Flask(__name__) @app.route('/', methods=["GET", "POST"]) def hello_world(): return {"access_token": "aa" * 50000}
执行以下命令启动HTTPS服务:
python3 -m flask run --cert=adhoc
问题现象
使用requests库发送带数据的请求时,返回的响应内容会被截断。对比测试结果如下:
>>> import requests # 不带数据的POST请求,响应长度正常(100020) >>> len(requests.post('https://127.0.0.1:5000/', verify=False).content) 100020 # 带data参数的POST请求,响应被截断为81920 >>> len(requests.post('https://127.0.0.1:5000/', data={'a':'b'}, verify=False).content) 81920
相关补充信息
- 不启用SSL时,无论是否携带请求数据,返回结果均正常;
- GET请求也存在相同的响应截断问题;
- 使用curl工具发送相同请求,能获取完整的响应内容:
$ curl -s -k -X POST https://127.0.0.1:5000/ -H 'Content-Type: application/json' -d '{"a":"b"}' | wc -m 100020
- 该问题已提交至requests官方仓库的Bug列表。
内容的提问来源于stack exchange,提问作者Frederico Schardong
相关产品推荐
相关产品推荐

