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

Python中requests调用API遇403错误求助:浏览器可正常访问该API

解决Python requests.get()调用API返回403但浏览器正常的问题

嘿,我来帮你拆解这个问题!你遇到的情况非常典型——浏览器能正常访问API,但用Python的requests.get()就返回403,而且其他API都没问题,这和Python本身的安全机制关系不大,核心原因是服务器对请求的验证规则,而浏览器和requests发送的请求在细节上有差异。

下面是最常见的几个原因和对应的解决方法:

1. 缺失合法的User-Agent请求头

绝大多数服务器会通过User-Agent字段判断请求来源:浏览器会自动带上标识自身的长字符串(比如Chrome的Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36),而requests默认的User-Agent是python-requests/x.x.x,很容易被服务器识别为非浏览器请求并拦截。

解决方法:手动添加浏览器的User-Agent到请求头里:

import requests

url = "你的API地址"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
print(response.status_code)

2. 需要携带Cookie验证

如果浏览器之前访问过该API所在的网站,可能已经存储了会话Cookie(比如登录状态、会话标识),而requests默认是全新的会话,没有这些Cookie,服务器会认为你是未授权的请求。

解决方法:

  • 打开Chrome开发者工具(F12),切换到「Network」标签,刷新API请求,找到该请求的「Request Headers」里的Cookie字段,复制内容后添加到requests中:
cookies = {"Cookie": "这里粘贴你复制的Cookie内容"}
response = requests.get(url, headers=headers, cookies=cookies)
  • 或者用requests.Session()维持会话,模拟浏览器的会话状态:
session = requests.Session()
session.headers.update(headers)
# 先访问一次网站获取Cookie(如果需要)
session.get("API所在网站的首页")
# 再调用API
response = session.get(url)

3. 其他请求头缺失

有些服务器会验证更多请求头,比如Accept、Accept-Language、Referer等,这些都是浏览器自动带上的,但requests默认可能不全。

解决方法:直接复制浏览器发送的完整请求头,放到headers字典里。操作步骤:

  1. Chrome中打开API地址,F12打开开发者工具
  2. 「Network」标签里找到该API请求,点击进入详情
  3. 复制「Request Headers」里的所有字段(除了Host、Connection这类requests会自动处理的),整理成字典。

示例完整请求头:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://api所在的域名/"
}

总结

这个问题的本质是服务器对请求的来源合法性做了校验,而requests默认的请求格式不符合服务器的要求,和Python的安全机制无关。你只需要模拟浏览器发送的请求格式,就能解决403的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:26