我现在有个客户端处于内网 要通过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(); } } }