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

Python requests发起GET请求被拒,如何获取目标站点图表对应的JSON数据

认知误区说明
  • 无验证码不代表服务器无法区分浏览器和脚本请求:服务器会通过请求头完整性、IP归属地、TLS握手指纹、访问行为特征等多个维度识别脚本请求,你只校验了是否有特殊鉴权头,忽略了其他校验维度。
  • GET请求参数传递错误:你代码里用data参数传递查询参数,data是POST请求用来传请求体的参数,GET请求的查询参数应该用params字段传递,或者直接拼接在URL中,你这里同时拼接URL和传data属于无效操作。
  • 缺少标准浏览器请求头:你只传了x-requested-with头,缺了User-Agent(浏览器标识)、Referer(来源页地址)、Accept等浏览器默认携带的头字段,这类不完整的请求会被服务器直接判定为脚本。
  • IP地域限制:站点明确禁止亚洲地区IP访问,如果你使用的是国内IP,不管请求头修改的多标准,都会被直接拦截。
可运行脚本方案

前置要求:你需要先准备巴西地区的HTTP代理,否则依然会触发IP地域拦截。

修正后的代码如下:

import requests

# 目标接口地址
url = "https://www.oceans14.com.br/rendaVariavel/respostaAjax/gHistoricoPlBovespa.aspx"
# GET查询参数
params = {'periodo': 'completo'}
# 模拟浏览器的完整请求头
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',
    'Referer': 'https://www.oceans14.com.br/acoes/historico-pl-bovespa',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Language': 'pt-BR,pt;q=0.9,en;q=0.8',
    'X-Requested-With': 'XMLHttpRequest'
}
# 代理配置,替换为你自己的巴西代理地址
proxies = {
    'http': 'http://你的巴西代理地址:端口',
    'https': 'http://你的巴西代理地址:端口'
}

# 发起请求,不需要代理的话删掉proxies参数即可
response = requests.get(url, params=params, headers=headers, proxies=proxies)

# 打印返回的JSON数据
print(response.json())

额外注意事项

  • 控制请求频率,两次请求间隔至少3秒,避免触发站点的并发限制被封IP。
  • 如果返回还是被拦截,可以先在浏览器正常访问一次站点,把浏览器带的Cookie复制到请求头的Cookie字段中再尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:42:01