Http код ответа 429 при чтении HTML - PullRequest
0 голосов
/ 28 сентября 2018

В 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 Ответ

0 голосов
/ 28 сентября 2018

Возможно, проблема вызвана тем, что соединение не было закрыто / отключено.Для ввода 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();
...