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

Navitia API Token在Chrome可用,Java代码调用返回401错误

解决Navitia API调用401错误问题

问题原因

你在URL里用{myToken}@的方式传递认证信息时,Chrome会自动将其解析为HTTP基本认证逻辑(把token作为用户名,密码留空),但Java的HttpURLConnection并不会自动处理这种嵌入在URL里的认证信息,导致请求未携带正确的认证头,最终返回401未授权错误。

解决方案

需要手动为请求添加HTTP基本认证的Authorization头,具体步骤如下:

  1. 调整URL结构:移除URL中的{myToken}@部分,基础URL改为https://api.navitia.io/v1/journeys
  2. 生成认证头内容:将你的token作为用户名,空字符串作为密码,拼接成{你的token}:格式,再对该字符串进行Base64编码,最终组合成Basic 编码后的字符串格式的认证头
  3. 为请求设置认证头:给HttpURLConnection对象添加Authorization请求头

修改后的代码示例

import java.net.URL;
import java.net.HttpURLConnection;
import java.util.Base64;

public class NavitiaApiCall {
    public static void main(String[] args) throws Exception {
        String token = "你的实际token";
        String longDeparture = "出发地经度";
        String latDeparture = "出发地纬度";
        String longArrival = "目的地经度";
        String latArrival = "目的地纬度";

        // 构建不含认证信息的请求URL
        String sURL = "https://api.navitia.io/v1/journeys?from=" + longDeparture + ";" + latDeparture 
                     + "&to=" + longArrival + ";" + latArrival;
        URL url = new URL(sURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        // 生成并设置Authorization认证头
        String authStr = token + ":";
        String encodedAuth = Base64.getEncoder().encodeToString(authStr.getBytes());
        conn.setRequestProperty("Authorization", "Basic " + encodedAuth);

        conn.connect();

        int responseCode = conn.getResponseCode();
        if (responseCode != 200) {
            throw new RuntimeException("HttpResponseCode: " + responseCode);
        } else {
            // 这里处理返回的有效数据
        }
    }
}

额外说明

  • 如果你的token包含特殊字符,需要先对其进行URL编码(Navitia的token通常为无特殊字符的字符串,一般无需额外处理)
  • 若使用Java 8之前的版本,可改用javax.xml.bind.DatatypeConverter.printBase64Binary方法或Apache Commons Codec等第三方库完成Base64编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:01:07