日期:2014-05-20  浏览次数:20821 次

通过http代理 访问外网的机器
我现在有个客户端处于内网 要通过http代理 使用nio TCP连接访问外部网络的服务器
代码如下:
Java code

SocketAddress proxyAddress = new InetSocketAddress( "192.168.180.148" , 888 ) ; -- 内部网络的HTTP代理的IP 和端口
Proxy proxy = new Proxy( Proxy.Type.HTTP , proxyAddress ) ;
Socket s = new Socket( proxy ) ;       -------- 这个报错 
s.setReuseAddress( true ) ;
tcpclientSocketChannel = s.getChannel().open() ;
this.tcpclientSocketChannel.connect( new InetSocketAddress(  外部网络的IP 和端口  ) ) ;



错误
  java.lang.IllegalArgumentException: Invalid Proxy
  at java.net.Socket.<init>(Socket.java:122)


请问这样写有错吗? 如果不行还有别的办法吗?

------解决方案--------------------
代理类型无效 Socket 只能使用 Proxy.Type.SOCKS类型的代理
------解决方案--------------------
URL.openConnection(Proxy proxy) 这个方法可以使用Proxy.Type.HTTP类型的代理
------解决方案--------------------
这是我写的使用代理访问连接的代码,你参考看看把
Java code
public void run() {
        SocketAddress addr = new InetSocketAddress("XXX.XXX.com",8080);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);  
        
        
        for (int i = 0; i < 100; i++) {
            //    InputStream input = new URL("http://XXXXXX/XXX/XXX").openConnection().getInputStream();
            try {
                
                
            URL baseURL = new URL(address);
                HttpURLConnection uc = (HttpURLConnection) baseURL.openConnection(proxy);
                uc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
                InputStream input = uc.getInputStream();
            } catch (Exception e) {
                e.printStackTrace();
            }
            }
            
        
      }