Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用org.apache.commons.httpclient时,是否可以在命令行上设置代理?_Java_Http_Proxy_Apache Commons - Fatal编程技术网

Java 使用org.apache.commons.httpclient时,是否可以在命令行上设置代理?

Java 使用org.apache.commons.httpclient时,是否可以在命令行上设置代理?,java,http,proxy,apache-commons,Java,Http,Proxy,Apache Commons,如果应用程序使用java.net.*例程,我可以在调用应用程序时设置代理,如下所示: java -Dhttp.proxyHost=proxy.server.com -Dhttp.proxyPort=8000 <whatever-the-app-is> java-Dhttp.proxyHost=proxy.server.com-Dhttp.proxyPort=8000 但是,我有一个应用程序(我无法更改)使用org.apache.commons.httpclient进行http通信

如果应用程序使用java.net.*例程,我可以在调用应用程序时设置代理,如下所示:

java -Dhttp.proxyHost=proxy.server.com -Dhttp.proxyPort=8000 <whatever-the-app-is>
java-Dhttp.proxyHost=proxy.server.com-Dhttp.proxyPort=8000

但是,我有一个应用程序(我无法更改)使用org.apache.commons.httpclient进行http通信。它没有指定procxy服务器,但使用默认的HttpConnection。有什么方法可以从命令行告诉apache http客户端使用代理服务器吗?

我不这么认为。但这里有一段代码,我在一个旧项目中找到了这段代码,它应该是有效的:

try {
   String proxyHost = System.getProperty("https.proxyHost");
   int proxyPort = 0;
   try {
        proxyPort = Integer.parseInt(System.getProperty("https.proxyPort"));
   } catch (Exception ex) {
        System.out.println("No proxy port found");
   }

   System.setProperty("java.net.useSystemProxies", "true");

   ProxySelector ps = ProxySelector.getDefault();
   List<Proxy> proxyList = ps.select(new URI(targetUrl));
   Proxy proxy = proxyList.get(0);
   if (proxy != null) {
         InetSocketAddress addr = ((InetSocketAddress) proxy.address());
         if (addr != null) {
             proxyHost = addr.getHostName();
             proxyPort = addr.getPort();
         }
   }

   boolean useProxy = proxyHost != null && proxyHost.length() > 0;

   if (useProxy) {
         httpClient.getHostConfiguration().setProxy(proxyHost, proxyPort);
   }

} catch (Exception ex) {
   ex.printStackTrace();
}
试试看{
字符串proxyHost=System.getProperty(“https.proxyHost”);
int proxyPort=0;
试一试{
proxyPort=Integer.parseInt(System.getProperty(“https.proxyPort”);
}捕获(例外情况除外){
System.out.println(“未找到代理端口”);
}
setProperty(“java.net.useSystemProxies”,“true”);
ProxySelector ps=ProxySelector.getDefault();
List proxyList=ps.select(新URI(targetUrl));
Proxy Proxy=proxyList.get(0);
如果(代理!=null){
InetSocketAddress addr=((InetSocketAddress)proxy.address());
if(addr!=null){
proxyHost=addr.getHostName();
proxyPort=addr.getPort();
}
}
布尔值useProxy=proxyHost!=null&&proxyHost.length()>0;
如果(使用代理){
httpClient.getHostConfiguration().setProxy(proxyHost,proxyPort);
}
}捕获(例外情况除外){
例如printStackTrace();
}

不幸的是,我认为你不能。唯一的方法是应用程序读取系统属性,然后在对象中设置它


查看httpclient用户组了解更多详细信息。

使用httpclient生成器时,请使用useSystemProperties()方法启用标准JVM-D代理参数。

例如:

CloseableHttpClient httpclient = HttpClients.custom()
    .useSystemProperties()
    .build();

现在使用-Dhttp.proxyHost=10.0.0.100-Dhttp.proxyPort=8800配置代理。

谢谢。不幸的是,我不能(轻松地)更改应用程序,但也许我需要这样做毕竟谢谢。这不是唯一的方法(你可以通过其他方式设置代理,但据我所知,所有这些方式都涉及到更改应用程序)