Ошибка с http запросами
У меня возникла проблема с получением ответа от сервера, есть ссылка, на которую посылается get запрос, но вместо ответа ошибка:
public class Main {
public static void main(String[] args) throws IOException {
String url = "http://arizona-download.react.group/desktop/ping/Arizona/ping.json";
URL obj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
connection.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
}
Ошибка:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://arizona-download.react.group/desktop/ping/Arizona/ping.json
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1900)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at Main.main(Main.java:18)
Ответы (1 шт):
Проблема вполне типичная - вы не указали юзер агента. Замечательно, что вы знаете о использовании буферизации (BufferedReader), но помните, что все потоки ввода-вывода надо закрывать, иначе получить проблемы. С версии Java 7 и выше есть конструкции try with resources, которую рекомендуется использовать с этой целью. Кроме того, с версии Java 8 преобразовать BufferedReader в String можно на много проще. И напоследок... Использовать StringBuffer нежелательно, а если вам нужен его функционал воспользуйтесь классом StringBuilder.
public class Main {
public static void main(String[] args) throws IOException {
String url = "http://arizona-download.react.group/desktop/ping/Arizona/ping.json";
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String result = in.lines().collect(Collectors.joining());
System.out.println(result);
}
}
}