我需要发出 HTTP 请求并确定响应大小(以字节为单位)。 我一直使用
request
来进行简单的 HTTP 请求,但我想知道是否可以使用 raw 来实现这一点?
>>> r = requests.get('https://github.com/', stream=True)
>>> r.raw
我唯一的问题是我不明白什么是原始返回或如何以字节为单位计算此数据类型? 使用
request
和 raw 是正确的方法吗?
只需取回复内容的
len()
即可:
>>> response = requests.get('https://github.com/')
>>> len(response.content)
51671
如果您想保持流式传输,例如内容(太大)大,您可以迭代数据块并对它们的大小求和:
>>> with requests.get('https://github.com/', stream=True) as response:
... size = sum(len(chunk) for chunk in response.iter_content(8196))
>>> size
51671
我也有类似的问题。
Content-Length
也缺席。请记住,请求会自动解压gzip
。
SizeTrackingAdapter 类(HTTPAdapter): def init(self, *args, **kwargs): super().init(*args, **kwargs) self.compressed_size = 无
def build_response(self, req, resp):
raw_content = resp.read(decode_content=False)
compressed_size = len(raw_content)
resp._fp = BytesIO(raw_content)
response = super().build_response(req, resp)
response.compressed_size = compressed_size
return response
adapter = SizeTrackingAdapter(max_retries=Retry(3))
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get(YOUR_URL)
解决了!