原始响应的大小(以字节为单位)

问题描述 投票:0回答:3

我需要发出 HTTP 请求并确定响应大小(以字节为单位)。 我一直使用

request
来进行简单的 HTTP 请求,但我想知道是否可以使用 raw 来实现这一点?

>>> r = requests.get('https://github.com/', stream=True)
>>> r.raw

我唯一的问题是我不明白什么是原始返回或如何以字节为单位计算此数据类型? 使用

request
和 raw 是正确的方法吗?

python python-requests
3个回答
83
投票

只需取回复内容的

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

7
投票

r.raw
urllib3.response.HTTPResponse 的实例。我们可以通过查找响应头
Content-length
或使用内置函数
len()
来计算响应的长度。


0
投票

我也有类似的问题。

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)

解决了!

© www.soinside.com 2019 - 2024. All rights reserved.