想用java编写个代理服务器,求具体一些思路,详细一些,谢谢

想用java编写个代理服务器,求具体一些思路,详细一些,谢谢,第1张

在编写代理服务器之前,首先应该明白一点,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了。

那么反过来,显示这些系统属性,就可以看到有没有使用代理了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8034404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存