Похоже, что ConnectionTimeout не работает после установки прокси в jodd-http (6.0.2)

#http #proxy #jodd #connect-timeout

#http #прокси #jodd #время ожидания подключения

Вопрос:

Вот мой код

 import jodd.http.*;
import jodd.http.net.*;
public class JoddQuestion {
    public static void main(String[] args) {
        SocketHttpConnectionProvider connectionProvider = new SocketHttpConnectionProvider();
        ProxyInfo proxyInfo = ProxyInfo.httpProxy("xxxx", xx, "xxxx", "xxxx");
        connectionProvider.useProxy(proxyInfo);

        String url = "http://www.google.com";
        HttpResponse response = HttpRequest.get(url).open(connectionProvider).connectionTimeout(1000).timeout(1000).followRedirects(true).send();
        System.out.print(response.bodyText());
    }
}
 

Веб-сайт Google заблокирован брандмауэром в Китае. Без установки прокси запустите программу, ConnectionTimeout работает.

 HttpResponse response = HttpRequest.get(url).connectionTimeout(1000).timeout(1000).followRedirects(true).send();
 

введите описание изображения здесь

Однако после установки прокси ConnectionTimeout не работает, и программа просто продолжает попытки.

 HttpResponse response = HttpRequest.get(url).open(connectionProvider).connectionTimeout(1000).timeout(1000).followRedirects(true).send();
 

введите описание изображения здесь

Ответ №1:

open() Метод открывает соединение (и, следовательно, применяет ранее установленные тайм-ауты. Все, что установлено после вызова open() , не будет применено.

Вероятно, вы захотите использовать метод: withConnectionProvider() вместо open() — он просто установит провайдера и не откроет соединение. Затем тайм-аут будет применен, когда соединение действительно будет открыто.

Подробнее читайте здесь: https://http.jodd.org/connection#sockethttpconnectionprovider

Или просто используйте open() в качестве последнего метода перед отправкой. Но я бы настоятельно избегал использования open без уважительной причины: просто используйте send() , так как это откроет соединение.

РЕДАКТИРОВАТЬ: пожалуйста, обновитесь до Jodd HTTP версии 6.0.6, чтобы предотвратить некоторые несвязанные проблемы, упомянутые в комментариях.

Комментарии:

1. Спасибо за ваш ответ. Но когда я использую withConnectionProvider, каждый веб-сайт не может быть доступен. Вот код: HttpResponse response = HttpRequest.get(url).withConnectionProvider(connectionProvider).connectionTimeout(1000).timeout(1000).followRedirects(true).send();