原帖:http://bbs.csdn.net/topics/390416704
//可以使用代理来实现
public static void main(String[] args) throws Exception {
        URL url = new URL("http://www.******.com/");
        Proxy proxy = new Proxy(Proxy.Type.HTTP,  
                new InetSocketAddress(InetAddress.getByAddress(new byte[]{(byte)192,(byte)168,(byte)119,(byte)182}),80));  
        HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(proxy);  
        InputStream in = httpUrlConn.getInputStream();
        String response = FileUtil.getContent(in, "UTF-8");
        System.out.println(response);
    }是如何用代码实现绑定本机host的,使用代理服务器来实现的。现在我的问题是:当我们使用代理服务器获取http://www.***.com的时候,我们本机的socket先连上代理服务器的socket,然后,代理服务器再去真正的获取http://www.***.com,代理服务器应该也是首先查找本机的host的吧?但是,我测试的结果是,代理服务器上的host可以随便设置。非常不解!

解决方案 »

  1.   


    public static void main(String[] args) {  
            try {  
                URL url = new URL("http://www.nonexists.com/");  
                // 创建代理服务器  
                InetSocketAddress addr = new InetSocketAddress("localhost",80);  
                // Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Socket 代理  
                Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理  
                // 结束  
                URLConnection conn = url.openConnection(proxy);  
                InputStream in = conn.getInputStream();  
                // InputStream in = url.openStream();  
                String s = FileUtil.getContent(in);
                System.out.println(s);  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    //我是想把本机的tomcat当成代理服务器,然后用tomcat去访问一个不存在的url,结果返回了tomcat的主页。
      

  2.   

    我猜测的结果是这样的,我们的应用服务器实际上并不是一台代理服务器,因此,他实际上并不具有代理服务器的功能。客户端通过tomcat来获取某个url的内容的时候,实际上就是向tomcat发出了一个请求,因为它不是代理服务器,因此它自己做响应了。正常的代理服务器收到请求以后是要再次请求同样的url的。