我试图找到一种方法来强制Jar通过我的代理服务器(在本地主机上运行)(也是Java应用程序)对外部IP进行的任何连接尝试。 一旦代理服务器接收到连接,它将打开与外部IP的连接并开始将IO与客户机/服务器进行路由。启动选项以强制Java套接字连接到本地主机?
我一直在谷歌搜索这2天,我没有任何运气,我相信我在我的搜索尝试中使用错误的条款。
如果您有任何想法,请让我知道,我会尝试任何。
在此先感谢。 - 肖恩。
我试图找到一种方法来强制Jar通过我的代理服务器(在本地主机上运行)(也是Java应用程序)对外部IP进行的任何连接尝试。 一旦代理服务器接收到连接,它将打开与外部IP的连接并开始将IO与客户机/服务器进行路由。启动选项以强制Java套接字连接到本地主机?
我一直在谷歌搜索这2天,我没有任何运气,我相信我在我的搜索尝试中使用错误的条款。
如果您有任何想法,请让我知道,我会尝试任何。
在此先感谢。 - 肖恩。
如果它是HTTP流量或FTP流量,你可以试试下面的系统属性:
http.proxyHost(默认) 把http.proxyPort(默认值:80如果http.proxyHost指定) http.nonProxyHosts(默认:
请参阅此链接的详细信息:
http://java.sun.com/docs/books/tutorial/networking/urls/_setProxy.html
如果是一个“真正的”代理的,你可以指定代理使用JA使用VA系统属性。
你有两种选择:
那么你实际上有三个
从命令行您将使用:
java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -jar YourJar.jar
随着所有的HTTP连接执行将通过localhost
在端口8080
二是在main方法添加此你的程序:
public static void main(String [] args) {
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8080");
.....
}
这是一样的。
从myapp.properties
public static void main(String [] args) {
try { // there are cleaner ways of course
ResorceBundle bundle = ResourceBundle.getBundle("myapp");
System.setProperty("http.proxyHost", bundle.getString("proxy.server"));
System.setProperty("http.proxyPort", bundle.getString("proxy.port"));
} catch(MissingResourceException missingResourceException){}
....
}
最后加载你只需要确保myapp.properties
可从classpath
有关此功能的更多信息here
如果你问一般(NOT HTTP/FTP特定!)代理Socket连接,那么简单的答案是它不被Java支持。
当您为HTTP和FTP流量配置代理时,代理发生在应用程序协议级别。 Java端代理属性告诉URLConnection层连接到您指定的代理,而不是您应用程序试图连接到的URL的IP地址。 Java Socket级别不知道发生了这种情况。它只是看到连接到代理的请求。
这项工作是因为HTTP和FTP协议专门支持代理。例如,HTTP GET请求消息的第一行'给出了客户端请求的页面的完整URL。如果GET请求进入代理,代理可以找出需要发送的地址。
从Socket级别的代理问题来看,第一个观察结果是标准Java类库不支持这一点。第二个观察结果是,它实际上是无法实现的......除非你将它作为一个替代传输层实现。原因是IP和TCP/IP根本不支持显式代理或中继消息/流的概念。即使你实现了这种传输,它也不适合标准的Socket模型。
所以,如果你是真的询问大约代理Java应用程序的网络流量都,这只能在JVM之外执行;即在JVM(物理或虚拟)主机操作系统的网络传输级别上。
我不完全同意这一点。自Java 1.5以来,内置对SOCKS代理的支持(请参阅'java.net.Socket(代理代理)'的构造函数)。但是,是的,对于HTTP协议,需要一些额外的层来处理它。 Apache'commons-httpclient'开发人员承诺在4.x版本的库中添加此支持(请参阅http://wiki.apache.org/HttpComponents/FrequentlyAskedApplicationDesignQuestions#Proxy_Configuration)。 – 2010-03-04 20:05:07
并且...是...有完整的代理支持(至少在Java 6中以及HTTP和FTP)。参见'sun.net.www.protocol.ftp.FtpURLConnection#connect()'和'sun.net.www.protocol.http.HttpURLConnection#plainConnect()'。另外支持身份验证。 – 2010-03-04 20:12:51
同样在这里讨论:http://stackoverflow.com/questions/1432961/how-do-i-make-httpurlconnection-use-a-proxy – 2010-03-04 20:14:27