在jodd-http(6.0.2)中设置代理后,connectionTimeout似乎不起作用



这是我的代码

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

谷歌网站在中国被防火墙屏蔽。在不设置代理的情况下,运行程序,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();

在此处输入图像描述

open()方法打开连接(因此应用以前设置的超时。调用open()之后设置的任何东西都不会应用。

您可能想要使用方法:withConnectionProvider()而不是open()——它只会设置提供程序,而不会打开连接。然后,当连接实际打开时,将应用超时。

点击此处阅读更多信息:https://http.jodd.org/connection#sockethttpconnectionprovider

或者只使用open()作为发送前的最后一种方法。但我强烈避免在没有充分理由的情况下使用open:只使用send(),因为它会打开连接。

编辑:请升级到Jodd HTTPv6.0.6,以防止评论中提到的一些非相关问题。

最新更新