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

Python使用requests库发POST请求下载PDF时报TypeError问题咨询

错误根因

你定义请求参数qdata时使用了大括号但没有配置键值对结构,实际生成的是**集合(set)**类型,而非requests.post的data参数要求的字典(dict)类型。requests无法正确序列化集合类型的请求参数,最终导致底层ssl发送数据时出现类型错误。

修复方案

先把请求参数修正为标准字典结构,请求成功后直接将二进制响应写入本地PDF文件即可,完整可运行代码如下:

import requests

base_url = "https://homeland.my.salesforce.com"
action = base_url + "/sfc/p/#1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU"

# 修正为字典结构,键值对匹配接口要求的参数
qdata = {
    "compositePageName": "1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU"
}

# 发送POST请求,若接口需要身份认证可额外添加headers参数传入Cookie、Authorization等认证信息
req = requests.post(url=action, data=qdata, stream=True)

# 校验请求成功后保存PDF
if req.status_code == 200:
    with open("output.pdf", "wb") as f:
        for chunk in req.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    print("PDF文件已成功保存为output.pdf")
else:
    print(f"请求失败,状态码:{req.status_code},响应内容:{req.text}")

额外注意事项

  • 如果目标接口需要身份认证,需要先调用登录接口获取有效Cookie,或者在请求头中添加Authorization字段传入认证凭证,否则会返回401/403权限错误。
  • 大体积PDF使用stream=True+iter_content分片写入可以减少内存占用,小体积PDF也可以直接用f.write(req.content)一次性写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:05