在编写代理服务器之前,首先应该明白一点,Java的代理机制,如图所示:
那么Java就处于中间这层代理服务器,代理服务器所作的事情如下:
1、接收客户端请求,进行处理,然后发送给服务端
2、接收服务端响应,进行处理,然后发送给客户端
这样,就更清晰了,Java提供了代理的API为,java.net.Proxy类。此类表示代理设置,通常为类型(http、socks)和套接字地址。Proxy 是不可变对象。
也就是说Java可以制作高级协议的代理,如 HTTP 或 FTP。也可以制作SOCKS(V4 或 V5)代理。
首先,使用到了URL类,HttpURLConnection类及其我们的代理类Proxy类。他们都位于java.net包中。
第一步:生成代理,指定端口为8888:
第二步:使用URLConnection类进行连接www.moonsos.com
第三步:打开URL,并且读取HTML源码
在JAVA中怎么设置代理服务器呢,非常简单public void setServiceProxy(Config config) {
this.config = config
System.setProperty("http.proxyHost", config.getProxyHost())
System.setProperty("http.proxyPort", config.getProxyPort())
System.setProperty("https.proxyHost", config.getProxyHost())
System.setProperty("https.proxyPort", config.getProxyPort())
}
然后在每一个HttpUrlConnection请求中,设置代理服务器用户名和密码,并进行Base64加密(看你代理服务器的要求,可能因代理服务器不同而不同),代码如下
private HttpURLConnection getProxyHttpConnection() throws IOException {
String authorization = config.getProxyUser() + ":"
+ config.getProxyPassword()
URL url = new URL(config.getRequestUrl())
HttpURLConnection conn = (HttpURLConnection) url.openConnection()
conn.setRequestProperty("Proxy-Authorization",
"Basic " + Base64.encodeBase64String(authorization.getBytes()))
return conn
}
Java中,使用proxy是通过设置java环境变量来实现的,也就是JVM的系统属性。我们需要设置三个属性,proxySet proxyHost和proxyPort。
proxySet 是个boolean类型的,可以设置为true或者false,true代表使用代理服务器。
proxyHost 是代理服务器的IP地址
proxyPort 是代理服务器的端口地址。
我们有两种方法设置这种系统属性,
一种是命令行下运行Java程序的时候,通过参数付值
一种是在java源程序中设置。
第一种方法的格式如下:
java -DproxySet=true -DproxyHost=myProxyServer.come -DproxyPort=80 MyJavaApp
第二种方法,就是直接在源程序中通过系统属性来写,如下:
import java.util.Properties
...
...
strProxy="221.15.5.67"
strPort="8080"
Properties systemProperties = System.getProperties()
systemProperties.setProperty("http.proxyHost",strProxy)
systemProperties.setProperty("http.proxyPort",strPort)
....
JDK1.3以上版本,只要设置了proxyHost和proxyPort就不用写proxySet了。
那么反过来,显示这些系统属性,就可以看到有没有使用代理了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)