我试图使用代理通过HTTP建立FTP连接。
我使用以下代码设置HTTP和HTTPS代理主机和端口:
system.setProperty("java.net.useSystemProxies","true");
List<Proxy> l = null;
try {
l = ProxySelector.getDefault().select(new URI("http://foo/bar"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
if (l != null) {
for (Iterator iter = l.iterator(); iter.hasNext();) {
java.net.Proxy proxy = (java.net.Proxy) iter.next()
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if (addr != null) {
System.setProperty("http.proxyHost", addr.getHostName());
System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
System.setProperty("https.proxyHost", addr.getHostName());
System.setProperty("https.proxyPort", Integer.toString(addr.getPort()));
System.setProperty("socksProxyHost",addr.getHostName());
System.setProperty("socksProxyPort","xxxx" );
我想知道是否有一种方法可以知道关于已配置的Internet端口(在Windows Internet代理控制面板中),有关该代理可以在运行时使用以下代码进行设置:
System.setProperty("socksProxyPort")
我需要在用户不知道端口的情况下进行连接,并在连接之前在软件中选择它,因为我想“自动”执行此操作,因为我可以设置从系统获取参数的HTTP代理。
我需要这个,因为我有一个奇怪的问题:
如果我未在袜子代理的运行时设置端口号,则我的客户端无法使用AXIS2库和Windows Internet选项面板中的Web服务服务器IF正确发出PUT或GET请求,则代理服务器将配置有以下选项:“使用相同所有协议的代理服务器”
如果我取消标记该选项,并且手动设置了socks addres(192.168.x.y port 1080),那么奇怪的是,该连接将继续进行,而无需通过代码设置端口,并且对所有协议都使用相同的代理服务器。
我也可以尝试使用另一个端口es 808来更改袜子端口。如果在我的代码中我使用System.setProperty(“ socksProxyPort”,“ 808”)设置了相同的端口,则可以与服务器连接
最佳答案
库proxy-vole包含用于通过各种策略自动检测系统的代理设置的代码。
至于为什么在设置端口时您的代码可以工作,我不知道。混合使用HTTP,FTP和SOAP感觉很奇怪。您可能需要安装一个本地代理服务器,该服务器可以监视通过它的所有数据并将真实代理设置为上游。这样,您可以看到您的应用程序如何尝试与代理通信。这将为您提供线索,说明其破裂的原因。