#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();