http - 在 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 HTTP v6.0.6以防止评论中提到的一些不相关的问题。
推荐阅读
- python - 当输入看似在后台时,如何使用 python 中的请求在文本区域中输入文本,并使用 bs4 检索 html?
- reactjs - Ionic/React/TypeScript,使用 react-router history.push、history.replace 和 history.goBack 动画触发两次
- git - git pull 可以分离到哪些命令?
- python - Python3 中有没有办法动态构建函数参数名称?
- python - 尝试在序列化程序“AppointmentSerializer”上获取字段“Name”的值时出现 AttributeError
- javascript - 如何不从 lodash 触发油门功能?
- android - 使用 RecyclerView Android Studio 在不同行上设置列
- flutter - 显示底部导航栏颤动的对话框
- c# - 如何为我在 Visual Studio 2019 中制作的 C# 控制台应用程序(Checkers Game)创建安装程序?
- coldfusion - 当我在 CF admin 中查看时间表时,它会引发错误