【问题标题】:The connectionTimeout seems not work after setting the proxy in jodd-http(6.0.2)在 jodd-http(6.0.2) 中设置代理后,connectionTimeout 似乎不起作用
【发布时间】:2021-03-16 14:29:42
【问题描述】:

这是我的代码

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

enter image description here

但是,设置代理后,connectionTimeout 不起作用,程序只是继续尝试。

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

enter image description here

【问题讨论】:

    标签: http proxy jodd connect-timeout


    【解决方案1】:

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

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

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

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

    编辑:请升级到 Jodd HTTP v6.0.6 以防止出现 cmets 中提到的一些无关问题。

    【讨论】:

    • 感谢您的回复。但是当我使用 withConnectionProvider 时,每个 wibesite 都无法访问。这是代码:HttpResponse response = HttpRequest.get(url).withConnectionProvider(connectionProvider).connectionTimeout(1000).timeout(1000).followRedirects(true).send();
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多