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

如何用Python下载含签名等参数的非简单PDF链接文件?

解决Azure Blob带SAS链接的Python下载问题

针对你遇到的带SAS参数的Azure Blob PDF链接无法用基础requests代码下载的问题,可以从以下几个方向调整代码:

1. 修复URL编码问题

你的URL包含大量URL转义字符(如%2B、%3D、%22),直接传入requests可能触发隐性二次编码,导致SAS参数失效。可以通过解码确保URL原样传递:

import requests
from urllib.parse import unquote

# 替换为你的完整Blob SAS链接
raw_url = "https://....blob.core.windows.net/../.../../signedefiles/.....pdf?sv=date&se=2023-11-17T16%3A35%3A35Z&sr=b&sp=r&rscc=no-store&rscd=attachment%3Bfilename%3D%22ABC+QRZ+8112+2022.pdf%22&rsct=application%2Fpdf&sig=ABCDEF%2GHIJK%2123%3D"
# 解码后使用,避免二次编码破坏参数
url = unquote(raw_url)

response = requests.get(url)
# 先打印状态码排查问题:200为成功,403/404说明参数或URL有误
print(response.status_code)

with open('sample.pdf', 'wb') as f:
    f.write(response.content)

2. 添加模拟请求头匹配Power Automate行为

Power Automate发起请求时会携带特定请求头,Azure Blob可能对请求头有隐性要求。尝试添加常见请求头:

import requests

url = "你的完整Blob SAS链接"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept": "application/pdf, */*",
    "Accept-Language": "en-US,en;q=0.9"
}

response = requests.get(url, headers=headers)
# 主动抛出HTTP错误,方便定位问题
response.raise_for_status()

with open('sample.pdf', 'wb') as f:
    f.write(response.content)

3. 使用Azure官方SDK下载(最可靠方案)

针对Azure Blob存储,使用官方azure-storage-blob SDK可以彻底规避URL参数处理问题:

先安装SDK:

pip install azure-storage-blob

然后编写下载代码:

from azure.storage.blob import BlobClient

sas_url = "你的完整Blob SAS链接"
blob_client = BlobClient.from_blob_url(sas_url)

with open("sample.pdf", "wb") as f:
    blob_data = blob_client.download_blob()
    blob_data.readinto(f)

排查提示

  • 优先查看response.status_code:403代表SAS权限失效或参数错误,404代表Blob路径错误,5xx代表服务器端问题。
  • 若仍失败,可对比Power Automate的请求日志,完全复刻它的请求头参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:42:34