首页 > 解决方案 > 在 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();

在此处输入图像描述

标签: httpproxyjoddconnect-timeout

解决方案


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

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

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

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

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


推荐阅读