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

OpenSky航班追踪API请求报错:连接错误与数据帧列不匹配

解决航班追踪器的连接错误与数据列不匹配问题

错误原因分析与修复步骤

1. 连接错误(ConnectionError)

你直接将用户名密码硬编码在URL的https://后方,导致requests错误地将wvzack识别为主机名,进而触发域名解析失败。正确的HTTP基本认证应该使用requests内置的auth参数传递,而非拼接在URL中。

2. 列长度不匹配错误(ValueError)

当请求失败或API返回的states为空列表时,你创建的DataFrame没有任何列,此时强行赋值17个列名就会出现长度不匹配。需要先校验请求状态与数据是否存在,再进行后续处理。

另外注意:你代码中lat_min=-49.082514是明显笔误,温哥华周边纬度为北纬49度左右,需改为正数,否则区域范围错误会导致无数据返回。

修改后的完整代码

import requests
import pandas as pd

# 修正区域坐标(修复纬度负数笔误)
lon_min = -123.063498
lat_min = 49.082514
lon_max = -123.295758
lat_max = 49.308148

# 请求配置
user_name = "wvzack"
password = "########"
url_data = "https://opensky-network.org/api/states/all"
params = {
    'lamin': lat_min,
    'lomin': lon_min,
    'lamax': lat_max,
    'lomax': lon_max
}

try:
    # 使用auth参数传递认证信息,避免URL拼接错误
    response = requests.get(url_data, auth=(user_name, password), params=params)
    response.raise_for_status()  # 主动抛出HTTP状态码错误
    data = response.json()
    
    col_names = [
        'icao24','callsign','origin_country','time_position','last_contact',
        'long','lat','baro_altitude','on_ground','velocity','true_track',
        'vertical_rate','sensors','geo_altitude','squawk','spi','position_source'
    ]
    
    # 安全获取states数据,默认空列表
    states = data.get('states', [])
    if not states:
        print("当前区域没有航班数据")
    else:
        flight_df = pd.DataFrame(states)
        # 动态匹配列数,避免硬编码范围出错
        flight_df = flight_df.iloc[:, :len(col_names)]
        flight_df.columns = col_names
        flight_df = flight_df.fillna('No Info')
        print(flight_df.head())
        
except requests.exceptions.ConnectionError as e:
    print(f"连接错误: {e}")
except requests.exceptions.HTTPError as e:
    print(f"HTTP请求错误: {e}")
except ValueError as e:
    print(f"数据处理错误: {e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:22:50