这是我的代码
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,以防止评论中提到的一些非相关问题。