【问题标题】:Getting 403 response at this specific URL在此特定 URL 获得 403 响应
【发布时间】:2026-01-09 21:25:01
【问题描述】:

我正在尝试从 API url 获取 JSON,但我得到的是 java.io.IOException: Server returned HTTP response code: 403

如果我只是将链接放在浏览器中,它就可以正常工作。这是链接(用访问令牌替换 TOKEN):API

我认为代码有效,因为当我使用 JSONPlaceHolder 链接时它有效:https://jsonplaceholder.typicode.com/todos/

我的代码:

private static String streamToString(InputStream inputStream) {
        String text = new Scanner(inputStream, "UTF-8").useDelimiter("\\Z").next();
        return text;
    }

    public static String jsonGetRequest(String urlQueryString) {
        String json = null;
        try {
            URL url = new URL(urlQueryString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setInstanceFollowRedirects(false);
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("charset", "utf-8");
            connection.connect();
            InputStream inStream = connection.getInputStream();
            json = streamToString(inStream); // input stream to string
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return json;
    }

【问题讨论】:

  • 可能是因为您的浏览器窗口中已经有一个活动会话,因此,您拥有所有必要的标头和 cookie。但是您正在构建的应用程序中没有活动会话。所以我认为您应该在调用 API 之前为您的应用添加一些身份验证机制。
  • 我也有 403 访问被拒绝,因为“该网站的所有者 (apiadvisor.climatempo.com.br) 已禁止您的 IP 地址所在的国家或地区 (UA) 访问该网站。所以也许你需要额外的请求头
  • 嘿,htshame,你能给我一个我可以使用的身份验证机制的例子吗?
  • Sergey,我不认为这会是个问题,我在巴西,这里的 API 工作正常
  • 我刚刚意识到您的网址中有一个token 参数。万一,那是你的 api 密钥吗?

标签: java json


【解决方案1】:

该站点正在阻止默认的 Java 用户代理。你需要通过setRequestProperty设置一个不同的:

connection.setRequestProperty("User-Agent","useragent");

请注意,代理实际上是什么并不重要,只要它不是默认代理即可。 使用“a”的用户代理:

【讨论】:

    最近更新 更多