Не удается подключиться к определенному веб-сайту с помощью URLConnection, время чтения истекло

Я использую этот код:

public static void main(String[] args) throws IOException {
    String EngLink;
    URL EngUrl;
    URLConnection EngCon;
    String cookiesHeader;
    InputStream EngIs;
    BufferedReader EngBr;
    String line;
    String EngPageHtml = "";

    EngLink = "https://www.zomato.com/";
    EngUrl = new URL(EngLink);
    EngCon = (HttpURLConnection) EngUrl.openConnection();
    EngCon.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB;     rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");

    EngIs = EngCon.getInputStream();
    EngBr = new BufferedReader(new InputStreamReader(EngIs,"UTF-8"));

    while ((line = EngBr.readLine()) != null) {
        EngPageHtml = EngPageHtml + "\n" + line;
    }

    System.out.println(EngPageHtml);        
    }

и я пытаюсь получить необработанный HTML-код сайта. Однако, когда я запускаю код, я получаю эту ошибку:

Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
at sun.security.ssl.AppInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at project1.Aaa.main(Aaa.java:33)

Я использую этот код для успешного получения HTML с нескольких других сайтов, но этот конкретный не работает.

В чем может быть проблема и как ее обойти?

Обновлено: загрузка сайта в firefox, получение файла cookie оттуда и передача его:

EngCon.setRequestProperty("Cookie",cookie);

заставляет страницу загружаться, но это нехорошо, так как ее нельзя использовать снова и снова.

Вы пробовали этот URL-адрес zomato.com/mumbai?

user2575725 02.05.2018 08:53

Вам нужно использовать «HttpsURLConnection», а не «HttpURLConnection», и вам нужно импортировать «javax.net.ssl.HttpsURLConnection».

Chamara Maduranga 02.05.2018 09:05

@ChamaraMaduranga HttpsURLConnection является подклассом HttpURLConnection, поэтому, если вам не нужен доступ к каким-либо функциям SSL, можно использовать HttpURLConnection.

Andreas 02.05.2018 09:11

Получение cookie из того, что я получил в mozzilla, сработало, в частности, два значения для «ak_bmsc» и «bm_sv». Остальные - PHPSESSID = null; fbcity = 93; zl = en; fbtrack = null; dpr = 2; G_ENABLED_IDPS = Google; csrf = null; использование этого приводит к загрузке страницы, однако я, очевидно, предпочел бы метод, который не требует от меня копирования cookie из Mozilla, потому что я понятия не имею, как долго это будет работать.

GohanCZ 02.05.2018 09:26

Ошибки Read timed out обычно вызваны прокси-сервером или брандмауэром. В случае наличия брандмауэра (например, внутри корпоративной сети) вы должны установить сетевые свойства, чтобы установить прокси и дополнительную аутентификацию: https.proxyHost, https.proxyPort и т. д.

Little Santi 02.05.2018 10:31

@LittleSanti Если бы это было так, не повлияло бы это на все остальные сайты? Как я уже упоминал, этот код работает на других сайтах без каких-либо проблем, только он вызывает у меня проблемы.

GohanCZ 02.05.2018 10:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
214
1

Ответы 1

Это было решено добавлением еще одного свойства запроса:

EngCon.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

Больше ничего не нужно было

Другие вопросы по теме