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

如何在Python中通过API调用下载JSON文件?解决Shared Secret认证403问题

解决方案:携带Shared Secret请求API并下载JSON

我来帮你搞定这个问题——你现有的URL已经包含了HTTP基本认证信息(API_Key:Password@域名),requests库会自动解析这部分完成身份验证。而Shared Secret通常需要以API要求的方式附加到请求中,最常见的是通过请求头传递,少数情况会用查询参数。下面给你具体的实现步骤和代码示例:

1. 先确认Shared Secret的传递规则

首先一定要对照API的官方文档,确认Shared Secret的正确传递方式:

  • 多数API会要求放在自定义请求头里,比如X-Shared-Secret、X-API-Secret这类字段;
  • 少数会要求作为Authorization头的一部分(格式类似Bearer <Shared Secret>);
  • 极少数会要求作为URL查询参数(比如?secret=xxx)。

2. 用requests库实现下载(最常用方案)

下面以请求头传递Shared Secret为例,给你完整的可运行代码:

import requests
import json

# 替换成你的实际信息
api_url = "https://API_Key:Password@LINK.com/fileName.json"
shared_secret = "你的Shared Secret密钥内容"

# 构造请求头(这里假设API要求用X-Shared-Secret字段,按需修改)
request_headers = {
    "X-Shared-Secret": shared_secret
    # 如果是Bearer格式,改成:"Authorization": f"Bearer {shared_secret}"
}

try:
    # 发送GET请求,URL里的基本认证信息会被requests自动处理
    response = requests.get(api_url, headers=request_headers)
    
    # 主动检查请求状态,4xx/5xx错误会直接抛出异常
    response.raise_for_status()
    
    # 解析返回的JSON数据
    json_data = response.json()
    
    # 将数据保存到本地JSON文件(格式化输出更易读)
    with open("downloaded_data.json", "w", encoding="utf-8") as output_file:
        json.dump(json_data, output_file, indent=4, ensure_ascii=False)
    
    print("JSON文件已成功下载并保存!")
except requests.exceptions.HTTPError as http_err:
    print(f"HTTP请求出错: {http_err}")
except requests.exceptions.ConnectionError as conn_err:
    print(f"网络连接失败: {conn_err}")
except Exception as general_err:
    print(f"其他错误: {general_err}")

3. 更安全的基本认证方式(可选)

把API_Key和密码直接写在URL里虽然方便,但可能存在明文泄露的风险,你可以改用requests的HTTPBasicAuth显式传递认证信息:

from requests.auth import HTTPBasicAuth

# 分离URL和认证信息
api_url = "https://LINK.com/fileName.json"
api_key = "你的API_Key"
password = "你的Password"

# 发送请求时指定auth参数
response = requests.get(
    api_url,
    auth=HTTPBasicAuth(api_key, password),
    headers=request_headers
)

4. 如果API要求Shared Secret作为查询参数

如果API文档明确说明要把Shared Secret放在URL参数里,你可以这样调整:

# 构造查询参数
query_params = {"shared_secret": shared_secret}

# 发送请求时携带params参数
response = requests.get(api_url, headers=request_headers, params=query_params)

关键注意事项

  • 一定要严格按照API文档要求的方式传递Shared Secret,否则还是会返回403错误;
  • 如果调试时依然报错,可以打印response.text查看API返回的具体错误信息,帮助快速排查问题;
  • 敏感信息(API_Key、Password、Shared Secret)不要硬编码在代码里,建议用环境变量或者加密配置文件管理。

内容的提问来源于stack exchange,提问作者T.SURESH ARUNACHALAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:37:56