引言
ADS-B Exchange 是一个广受欢迎的飞机跟踪平台,提供实时和历史飞行轨迹数据。通过浏览器访问类似 https://globe.adsbexchange.com/?icao=xxxxxx&lat=52.044&lon=-1.370&zoom=7.4&showTrace=YYYY-MM-DD×tamp=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 数据时,我遇到了以下问题:
- 403 Forbidden 错误:Python 请求返回 403,提示认证失败,可能是 Cookie 或标头不完整。
- 429 Too Many Requests 错误:即使我只发送了一次请求,服务器仍返回速率限制错误,提示“发送了过多请求”。
- Cookie 变化:通过浏览器开发者工具发现,认证相关的
adsbx_sidCookie 会频繁更新,旧值可能失效。 - 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×tamp=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,表明:
- 403:
adsbx_sid或adsbx_api可能过期,或标头缺失关键字段(如X-Requested-With)。 - 429:服务器可能基于 IP 或 Cookie 记录了历史请求,即使单次请求也触发限制。
思路:复制浏览器成功的标头和 Cookie,优化 Python 脚本。
步骤 3:精简 Cookie
检查浏览器请求发现,Cookie 包含大量广告/跟踪项(如 _ga、ct

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



