Простая программа Java пытается загрузить что-то из Интернета:
try (InputStream is = new URL(url).openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is))) { while ((line = br.readLine()) != null) { result.append(line); } }
Но некоторые веб-серверы возвращают следующие ошибки HTTP 403?
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://mkyong.com at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1919) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250) at java.base/java.net.URL.openStream(URL.java:1139)
Решение
Чтобы исправить это, добавьте User-Agent
в заголовки HTTP-запросов следующим образом:
package com.mkyong; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class JavaDownloadSample { public static void main(String[] args) throws IOException { String result = downloadWebPage("https://mkyong.com"); System.out.println(result); } private static String downloadWebPage(String url) throws IOException { StringBuilder result = new StringBuilder(); String line; // add user agent URLConnection urlConnection = new URL(url).openConnection(); urlConnection.addRequestProperty("User-Agent", "Mozilla"); urlConnection.setReadTimeout(5000); urlConnection.setConnectTimeout(5000); try (InputStream is = new URL(url).openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is))) { while ((line = br.readLine()) != null) { result.append(line); } } return result.toString(); } }
Рекомендации
- JavaDocs для подключения URL-адресов
- Ява – Как загрузить веб-страницу из Интернета?
- Википедия – HTTP 403
Оригинал: “https://mkyong.com/java/java-server-returned-http-response-code-403-for-url/”