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

MarineTraffic船舶轨迹接口请求遭遇403 Forbidden错误的原因及解决方法咨询

为什么MarineTraffic船舶轨迹接口返回403 Forbidden?怎么修复?

我来帮你拆解这个问题:你遇到的403 Client Error: Forbidden,本质是MarineTraffic服务器拒绝了你的请求,核心原因和可行修复方案如下:

一、第一个接口失败的关键原因

  • 接口权限差异:你调用的第一个接口是获取船舶历史轨迹的(gettrackjson),这类数据通常有更严格的访问控制——可能属于MarineTraffic的付费内容,或者需要用户登录后才能获取;而第二个接口是获取实时/latest位置的(latestPosition),属于公开可访问的基础数据,所以能正常返回结果。
  • 反爬机制拦截:MarineTraffic对历史轨迹接口的反爬检测更严格,你的请求头缺少关键验证信息:
    • 缺少referer字段:服务器会检查请求是否来自MarineTraffic的合法页面,直接请求接口会被判定为非浏览器发起的爬虫请求;
    • 缺少会话Cookie:浏览原始页面时,服务器会给浏览器设置会话Cookie,没有这个Cookie,接口会拒绝访问;
    • 可能还有其他隐藏验证字段(比如特定的请求参数或签名),这些是浏览器通过页面脚本生成的,你的简单请求无法模拟。

二、尝试修复的可行方案

1. 补全请求头的关键字段

先在浏览器中打开你提供的原始页面,打开开发者工具(F12),找到网络请求里的gettrackjson接口,复制它的完整请求头(包括Cookie、referer、origin等),替换到你的代码中。比如补充这些字段:

headers = {
    "accept": "application/json",
    "accept-encoding": "gzip, deflate",
    "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",
    "x-requested-with": "XMLHttpRequest",
    "referer": "https://www.marinetraffic.com/en/ais/home/centerx:79.3/centery:6.9/zoom:10",
    "cookie": "这里粘贴你从浏览器复制的Cookie内容"
}

⚠️ 注意:Cookie是有有效期的,过一段时间需要重新复制。

2. 模拟浏览器会话

使用requests.Session()来模拟完整的浏览器会话,先访问原始页面获取Cookie,再请求轨迹接口:

import requests

session = requests.Session()
# 先访问原始页面,获取会话Cookie
session.get("https://www.marinetraffic.com/en/ais/home/centerx:79.3/centery:6.9/zoom:10")

url = "https://www.marinetraffic.com/map/gettrackjson/shipid:5630138/stdate:2022-05-18%2015:07/endate:2022-05-19%2015:07/trackorigin:livetrack"
headers = {
    "accept": "application/json",
    "accept-encoding": "gzip, deflate",
    "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",
    "x-requested-with": "XMLHttpRequest",
    "referer": "https://www.marinetraffic.com/en/ais/home/centerx:79.3/centery:6.9/zoom:10"
}

response = session.get(url, headers=headers)
response.raise_for_status()
print(response.json())

3. 改用官方API

如果需要长期稳定获取数据,建议使用MarineTraffic的官方API服务——虽然部分功能需要付费或申请API密钥,但这是合法合规的方式,不会受到反爬限制,数据也更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:17:41