使用python requests请求403的问题

2026-01-20阅读(110)评论(0)牵着狗狗看MM

苏州实时公交查询

在使用 Python 的 requests 库调用第三方 API 或爬取网页时,你是否遇到过这样的情况:

import requests

response = requests.get("https://example.com/api/data")
print(response.status_code)  # 输出:403

明明 URL 没错、参数正确、网络通畅,却始终返回 403 Forbidden 错误。你反复检查代码,甚至怀疑是权限或 IP 被封,但最终发现——问题出在一个看似微不足道的请求头字段上:User-Agent

当使用 requests 发起请求时,如果没有显式设置 User-Agent,它会使用一个非常“诚实”但容易被识别为非浏览器的默认值:

python-requests/2.x.x
import requests
resp = requests.get("https://httpbin.org/headers")
print(resp.json()["headers"]["User-Agent"])
# 输出:python-requests/2.31.0

为什么这会导致 403?

许多网站或 API 出于以下原因,会主动拦截来自非浏览器客户端的请求:
  1. 反爬虫策略
    为了防止数据被自动化脚本抓取,服务端会检查 User-Agent。如果发现是 python-requests,直接返回 403。
  2. 安全策略
    某些 API 只允许来自“合法客户端”(如 Chrome、Safari、官方 App)的请求,认为脚本请求存在风险。
  3. 兼容性考虑
    有些老系统未适配非浏览器客户端,直接拒绝处理。

解决方案:设置一个正常的 User-Agent

import requests

url = "https://api.example.com/data"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

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

if response.status_code == 200:
    print("请求成功!")
else:
    print(f"请求失败: {response.status_code}")

 

赞(0)
转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » 使用python requests请求403的问题
分享到: 更多 (0)