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

使用Python的request.get()下载assist.org文件出现损坏问题求助

解决assist.org转学协议PDF下载损坏的问题

你的问题核心是请求头缺失导致服务器返回非真实PDF内容,assist.org的服务器会验证请求的客户端信息和来源,直接用requests.get不带自定义头的话,返回的是浏览器渲染用的页面而非原始PDF,最终导致文件损坏。

修正后的代码需要添加模拟浏览器的请求头,同时优化下载逻辑:

import requests

def download_file(file_number):
    url = f"https://assist.org/transfer/report/{file_number}"
    # 模拟Safari浏览器的请求头,可根据实际浏览器版本调整
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
        "Accept": "application/pdf,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Referer": "https://assist.org/"
    }
    
    # 流式下载处理大文件,避免内存占用过高
    with requests.get(url, headers=headers, stream=True) as response:
        response.raise_for_status()  # 主动抛出HTTP错误,便于排查问题
        with open(f"report_{file_number}.pdf", "wb") as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
    print(f"File 'report_{file_number}.pdf' downloaded successfully!")

file_number = "26917146"
download_file(file_number)

关键调整说明:

  • 请求头配置:User-Agent让服务器识别为合法浏览器请求,Accept明确指定优先接收PDF格式,Referer表明请求来源为assist.org官网,这些字段是服务器验证请求合法性的关键。
  • 流式下载:用stream=True分块写入磁盘,比一次性加载整个文件到内存更高效,也避免大文件导致的内存溢出。
  • 错误处理:response.raise_for_status()会在HTTP状态码异常时直接抛出异常,方便快速定位问题。

测试后,下载的PDF可在MacOS Preview中正常打开。后续遍历下拉菜单批量下载时,建议使用requests.Session()维持会话状态,减少重复连接被服务器限制的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:08:12