Http код ответа 429 при чтении HTML
В Java я хочу прочитать и сохранить весь HTML-код из URL(instagram), но получаю ошибку 429 (слишком много запросов). Я думаю, что это потому, что я пытаюсь прочитать больше строк, чем лимиты запросов.
StringBuilder contentBuilder = new StringBuilder();
try {
URL url = new URL("https://www.instagram.com/username");
URLConnection con = url.openConnection();
InputStream is =con.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String str;
while ((str = in.readLine()) != null) {
contentBuilder.append(str);
}
in.close();
} catch (IOException e) {
log.warn("Could not connect", e);
}
String html = contentBuilder.toString();
И ошибка такова;
Could not connect
java.io.IOException: Server returned HTTP response code: 429 for URL: https://www.instagram.com/username/
И это показывает также, что ошибка происходит из-за этой строки
InputStream is =con.getInputStream();
У кого-нибудь есть идея, почему я получаю эту ошибку и / или что нужно сделать, чтобы ее исправить?
1 ответ
Возможно, проблема вызвана тем, что соединение не было закрыто / отключено. Для ввода try-with-resources для автоматического закрытия даже при исключении или возврате также полезно. Также вы создали InputStreamReader, который будет использовать кодировку по умолчанию для машины, на которой будет работать приложение, но вам нужна кодировка содержимого URL.readLine
возвращает строку без окончания строки (что в целом очень полезно). Так что добавь.
StringBuilder contentBuilder = new StringBuilder();
try {
URL url = new URL("https://www.instagram.com/username");
URLConnection con = url.openConnection();
try (BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream(), "UTF-8"))) {
String line;
while ((line = in.readLine()) != null) {
contentBuilder.append(line).append("\r\n");
}
} finally {
con.disconnect();
} // Closes in.
} catch (IOException e) {
log.warn("Could not connect", e);
}
String html = contentBuilder.toString();