You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit2:如何获取响应体中的二进制文件

解决Web服务获取PDF二进制数据不全的问题

嗨,针对你调用Web服务获取PDF二进制数据却只拿到部分内容的问题,我整理了几个常见的排查方向和解决办法,应该能帮到你:

  • 避免误将二进制数据当文本处理
    这是最容易踩的坑!PDF是二进制文件,如果你用了处理文本的方法(比如response.text在requests库中),编码转换会丢失或破坏字节,直接导致数据截断。一定要用二进制方式读取:

    # 正确示例(requests库)
    import requests
    response = requests.get("你的接口地址")
    response.raise_for_status()  # 先确保请求无错误
    pdf_data = response.content  # 直接获取二进制内容
    with open("result.pdf", "wb") as f:
        f.write(pdf_data)
    
  • 处理大文件时用流式读取
    如果PDF文件较大,直接用response.content可能因为内存限制导致数据截断。这时候要开启流式模式,逐块读取:

    import requests
    url = "你的接口地址"
    response = requests.get(url, stream=True)
    response.raise_for_status()
    
    with open("result.pdf", "wb") as f:
        # 按8KB块读取,可根据情况调整chunk_size
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:  # 过滤空块
                f.write(chunk)
    
  • 检查请求头是否正确
    有些Web服务需要特定的请求头才会返回完整的PDF数据,比如指定Accept: application/pdf告诉服务端你要PDF格式,或者需要身份验证头:

    headers = {
        "Accept": "application/pdf",
        "Authorization": "Bearer 你的认证令牌"  # 如果接口需要登录验证的话
    }
    response = requests.get(url, headers=headers, stream=True)
    
  • 调整超时时间,避免网络中断
    如果请求超时设置过短,可能还没读完所有数据就被中断了。可以适当延长超时时间:

    # 设置30秒超时(可根据实际情况调整)
    response = requests.get(url, stream=True, timeout=30)
    
  • 验证读取到的数据完整性
    拿到文件后,先检查开头是否符合PDF规范,再对比文件大小和服务端返回的Content-Length(如果服务端提供的话):

    with open("result.pdf", "rb") as f:
        # 读取PDF头部验证
        header = f.read(8).decode('ascii')
        print(f"PDF头部: {header}")  # 正常应该输出 %PDF-1.4
        # 检查本地文件大小
        file_size = f.seek(0, 2)
        print(f"本地文件大小: {file_size} bytes")
        # 对比服务端返回的Content-Length
        if 'Content-Length' in response.headers:
            server_size = int(response.headers['Content-Length'])
            print(f"服务端返回大小: {server_size} bytes")
            if file_size != server_size:
                print("警告:文件大小不匹配,可能未读取完整!")
    

内容的提问来源于stack exchange,提问作者Peyman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:00:10