【发布时间】: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 密钥吗?