请问..java的NIO客户端怎么设置代理呢?
我会用jsocks的包实现有用户验证的Socket代理连接.
但使用SocketChannel.open()返回的是已经创建好的socket找了些资料.有的说代理服务器也需要支持NIO才能做连接..如果是,能告诉我有哪些(在linux运行)代理服务器是实现NIO的吗?
要自己写一个NIO的代理服务器吗??
我会用jsocks的包实现有用户验证的Socket代理连接.
但使用SocketChannel.open()返回的是已经创建好的socket找了些资料.有的说代理服务器也需要支持NIO才能做连接..如果是,能告诉我有哪些(在linux运行)代理服务器是实现NIO的吗?
要自己写一个NIO的代理服务器吗??
解决方案 »
- java表格里面的那些格子大小怎么设置
- EventDispatchThread 是个什么东东,我调试时为什么经常进入这个类。。。。
- SWT做的应用程序移植到linux,macosx,solaris需要那些包或者链接库?
- 一个小问题需要处理,程序中写了。帮帮忙啊~~
- 请看这段代码
- 哪位有JAVA的日期控件呢
- 请问\jdk\lib\下的这个dt.jar文件有什么作用?要什么场合下用得到?
- javadoc中link内联标记怎么用?谁能给个例子吗?
- 鸟鸟问题:我在开头import java.lang.*,当我执行该程序的时候她居然说:
- 关于JDK1.3的配置问题(二)?
- javaSE小程序
- java 爱好者 来 看看 这道题 怎么做啊
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost","myProxyMachineName");
System.getProperties().put("proxyPort","85");
Java代码 :
URLConnectionconnection=url.openConnection();
Stringpassword="username:password";
StringencodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost","myProxyMachineName");
System.getProperties().put("proxyPort","85"); 上面的第一行通知Java您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的Web浏览器,您就可能碰到过这种情况。以下是执行认证的方法:
Java代码
URLConnectionconnection=url.openConnection();
Stringpassword="username:password";
StringencodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
这段代码的思想是,您必须调整HTTP标头以发出用户信息。这是通过调用setRequestProperty()来实现的。这种方法允许您在发出请求之前处理HTTP标头。HTTP要求用base64对用户名和口令进行编码。幸运的是,有一组公用域API,它们将代您执行编码(请参阅参考资源部分)。
如您所见,在Java应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。
FTP代理
ScottD.Taylor提出这个秘诀来处理FTP协议代理:
Java代码
defaultProperties.put("ftpProxySet","true");
defaultProperties.put("ftpProxyHost","proxy-host-name");
defaultProperties.put("ftpProxyPort","85");
接下来您便可以通过以下代码使用"ftp"协议访问文件URL:
Java代码
URLurl=newURL(
"ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");
如果有人有使用其他网际协议代理的例子,我很想看看。
注意:代码示例(Example.java)仅在JDK1.1.4下测试过。
后续技巧!
对于仍在使用JDK1.1.7(配合WebSphere3.0)的开发人员而言,将proxyHost和proxyPort设为系统属性不起作用;conn.getInputStream()或者返回连接超时,或者是找不到主机路径。但是,我使用接受Host和Port为参数的URL构造函数解决了这一问题(使用我的代理主机和端口):
Java代码
publicURL(Stringprotocol,Stringhost,intport,Stringfile). 借助用户名和口令进行认证的方法不起作用。应将"Basic"置于认证字符串的开头;例如:
Java代码
StringencodedPassword=base64Encode(password); 应该是:
Java代码
StringencodedPassword="Basic"+base64Encode(password); 您也不必用一个单独的程序来进行64位编码。您可以使用sun.misc.BASE64Encoder()类。下面是完成这两处改动之后的代码:
Java代码
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost",proxyHost);
System.getProperties().put("proxyPort",proxyPort);
StringauthString="userid:password";
Stringauth="Basic"+newsun.misc.BASE64Encoder
().encode(authString.getBytes());
URLurl=newURL("http://java.sun.com/");
URLConnectionconn=url.openConnection();
conn.setRequestProperty("Proxy-Authorization",auth); 下面是使用socks4代理服务器的方法:
Java代码
[System.getProperty("socksProxySet",true);
System.getProperty("socksProxyHost",proxyHostName);
System.getProperty("socksProxyPort",proxyPort);
UsuallytheproxyPortforSocks4isport1080/code]
接下来您就可以用Socks4进行连接了。
<转载的~~~ 楼主可以看看~~>
也试过用阻塞的socket连接NIO服务器..但不知道为什么..客户端发送后..就是没法收取返回的信息..