Python只请求一定数量的字节
Posted
技术标签:
【中文标题】Python只请求一定数量的字节【英文标题】:Python request only a certain number of bytes 【发布时间】:2021-12-23 16:06:39 【问题描述】:我正在从 URL 请求 GIF 文件,并且我试图通过仅读取第一帧的字节来避免下载整个文件。有没有办法使用 requests 或 urllib.request 模块,只允许您请求/下载一定数量的字节?
import requests
r = requests.get("https://cdn.discordapp.com/attachments/712243005519560736/908229068909068318/sample_1.gif")
【问题讨论】:
【参考方案1】:你可以尝试先打开图片使用img.n_frames
它
from io import BytesIO
from PIL import Image
img = Image.open(BytesIO(r.content))
img.n_frames
输出
1
【讨论】:
【参考方案2】:您可以使用requests.Response.iter_content 来迭代响应数据。
读取前 10 个字节以提取宽度和 GIF 图片的高度:
测试:
import struct
import requests
URL = "https://cdn.discordapp.com/attachments/712243005519560736/908229068909068318/sample_1.gif"
def main():
with requests.get(URL, stream=True) as r:
header = next(r.iter_content(chunk_size=10))
typ, version, width, height = struct.unpack("<3s3sHH", header)
print(typ, version, width, height)
if __name__ == "__main__":
main()
测试:
$ python test.py
b'GIF' b'89a' 10 10
使用这种方法,您当然需要知道字节偏移量 和您要阅读的框架的大小。
【讨论】:
以上是关于Python只请求一定数量的字节的主要内容,如果未能解决你的问题,请参考以下文章
Python 的 os.path.getsize() 是不是具有真正的字节分辨率?
将 python x509 签名请求对象 (x509.CertificateSigningRequest) 对象转换为字节