从 403 和 429 到成功:用 Python 模拟浏览器请求获取 ADS-B Exchange 飞行轨迹数据的挑战

引言

ADS-B Exchange 是一个广受欢迎的飞机跟踪平台,提供实时和历史飞行轨迹数据。通过浏览器访问类似 https://globe.adsbexchange.com/?icao=xxxxxx&lat=52.044&lon=-1.370&zoom=7.4&showTrace=YYYY-MM-DD&timestamp=XXXXXXXXXX 的 URL,可以查看特定飞机的轨迹。我的目标是使用 Python 获取对应的 JSON 数据(https://globe.adsbexchange.com/globe_history/YYYY/MM/DD/traces/XX/trace_full_xxxxxx.json),以便自动化处理。然而,Python 请求遇到了 403 Forbidden 和 429 Too Many Requests 错误。本文分享了我通过开发者工具发现 JSON URL、调试 Python 请求的过程,最终实现成功获取数据的经验,旨在为遇到类似网页数据获取问题的开发者提供参考。

问题描述

在尝试用 Python 获取 ADS-B Exchange 的飞行轨迹 JSON 数据时,我遇到了以下问题:

  1. 403 Forbidden 错误:Python 请求返回 403,提示认证失败,可能是 Cookie 或标头不完整。
  2. 429 Too Many Requests 错误:即使我只发送了一次请求,服务器仍返回速率限制错误,提示“发送了过多请求”。
  3. Cookie 变化:通过浏览器开发者工具发现,认证相关的 adsbx_sid Cookie 会频繁更新,旧值可能失效。
  4. URL 验证:目标 URL 包含未来日期(如 2025/03/25),可能触发服务器的保护机制。

通过浏览器 InPrivate 模式访问原始 URL,我在开发者工具中捕获了 AJAX 请求(trace_full_xxxxxx.json),成功获取数据,标头和 Cookie 提供了关键线索。这表明 Python 请求需要完全模拟浏览器环境。

尝试的步骤与思路

步骤 1:通过开发者工具发现 JSON URL

我首先在 Edge 浏览器访问 https://globe.adsbexchange.com/?icao=xxxxxx&lat=52.044&lon=-1.370&zoom=7.4&showTrace=2025-03-25&timestamp=1742904602,打开开发者工具(F12,Network 面板),发现页面通过 AJAX 加载了 https://globe.adsbexchange.com/globe_history/2025/03/25/traces/XX/trace_full_xxxxxx.json。请求标头和 Cookie 包含认证信息。

思路:提取成功请求的标头和 Cookie,分析服务器的认证需求,尝试用 Python 模拟。

步骤 2:分析 Python 请求失败

我最初使用 Python 的 requests 库,代码如下:

import requests

url = "https://globe.adsbexchange.com/globe_history/2025/03/25/traces/XX/trace_full_xxxxxx.json"
headers = {
   
   
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0",
    "Referer": "https://globe.adsbexchange.com/?icao=xxxxxx"
}
cookies = {
   
   
    "adsbx_sid": "旧值",
    "adsbx_api": "旧值"
}
response = requests.get(url, headers=headers, cookies=cookies)

结果返回 403 或 429,表明:

  • 403adsbx_sidadsbx_api 可能过期,或标头缺失关键字段(如 X-Requested-With)。
  • 429:服务器可能基于 IP 或 Cookie 记录了历史请求,即使单次请求也触发限制。

思路:复制浏览器成功的标头和 Cookie,优化 Python 脚本。

步骤 3:精简 Cookie

检查浏览器请求发现,Cookie 包含大量广告/跟踪项(如 _gact

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值