Java 使用org.apache.commons.httpclient时,是否可以在命令行上设置代理?
如果应用程序使用java.net.*例程,我可以在调用应用程序时设置代理,如下所示: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 -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配置代理。谢谢。不幸的是,我不能(轻松地)更改应用程序,但也许我需要这样做毕竟谢谢。这不是唯一的方法(你可以通过其他方式设置代理,但据我所知,所有这些方式都涉及到更改应用程序)