我想在发送HttpClient
请求之前设置代理。因为我可以连接它,curl命令设置代理,但使用Java代码我无法做到这一点。
curl 命令:
**curl -I -x IP:80 URL**
Java文件中完成的代码变更:
HttpClient client = new HttpClient();
System.getProperties().put("http.proxyHost", "someProxyURL");
System.getProperties().put("http.proxyPort", "someProxyPort");
EntityEnclosingMethod method = new PostMethod(url);
method.setRequestEntity(new StringRequestEntity(requestXML, "text/xml", "utf-8"));
在我的java文件中进行上述代码更改后,我会遇到以下错误:
java.net.ConnectException: Connection refused (Connection refused)
这表明我无法将该URL与我试图用于连接该URL的代理连接起来。
5条答案
按热度按时间b1zrtrql1#
本教程中给出了一个完整的示例:How do I setting a proxy for HttpClient?
为此,您需要添加一个jar文件:http://repo1.maven.org/maven2/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar
Apache HttpClient 4.1设置代理的完整示例可在下面找到
资源链接:https://stackoverflow.com/a/4957144
对于其他版本,如4.3或4.3+,您可以通过以下SO回答:Apache HttpClient 4.1 - Proxy Authentication
sdnqo3pr2#
我想这可能会有帮助:
z0qdvdin3#
添加maven依赖项(4.2.X+):
使用
HttpClientBuilder
并设置标志useSystemProperties
:那你至少有两个选择
备选办法A:推翻论点,即
选项B:设置JVM(
${JAVA_HOME}/lib/net.properties
):并运行应用程序
cuxqih214#
系统属性通常必须预先设置,这意味着在jvm启动时使用
-Dhttp.proxyHost=some.host.com
-Dhttp.proxyPort=8080
,不要忘记httpsProxyHost和...端口)或者哪个也应该在静态{}块中工作。
我个人觉得Jersey客户机实现更容易使用,如果您可以选择切换的话。
yzckvree5#
Java 17的工作原理如下:
(3126是我代码片段中的代理端口。)