当前位置: 代码迷 >> J2SE >> 透过http代理 访问外网的机器
  详细解决方案

透过http代理 访问外网的机器

热度:53   发布时间:2016-04-24 00:23:39.0
通过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();            }            }                          }
  相关解决方案