帮助中心

   

热门搜索: 免费续期  推广  永久会员

java通过代理访问外网

Java想要访问外网数据能够通过什么方式实现?Java是一款强大的高级程序设计语言,能够应用于多个平台,在Java的网络编程中,有时候内网服务器需要访问外网的网络资源,这时候就需要使用代理。

 

java通过代理访问外网

 

1、通过设置系统属性(System.setPropery(String key, String value)的方式

 

可以使用其中的http.proxyHost,http.proxyPort这两个属性,分别设置代理服务器地址和代理端口。

 

//在你发起Http请求之前设置一下属性

System.setProperty(“http.proxyHost”, “www.proxy.com”);

System.setProperty(“http.proxyPort”, “8080”);

替换上面的代理服务器地址或IP地址,以及相应的端口为真实端口,Http连接就可以工作了。需要注意的是如果你设置了这些属性,那么所有的Http请求都会通过代理服务器。

 

这些属性是JVM级别的,设置了以后对所有的同类请求都有效。

 

如果你的代理服务器不需要验证,那到此就结束了。但一般都是需要验证的。但是你要是看了上面Java支持的属性列表,你就会发现那里面并没有期望中的

http.proxyUserName=username

http.proxyPassword=password

 

这两个属性。 这时就需要java.net.Authenticator类来完成一般的Http验证。

 

但是java.net.Authenticator这个类却是个抽象类,我们要使用还需要实例化一下子自己的类。如下:

 

public class BasicAuthenticator extends Authenticator {

String userName;

String password;

public BasicAuthenticator(String userName, String password) {

this.userName = userName;

this.password = password;

}

/**

* Called when password authorization is needed. Subclasses should

* override the default implementation, which returns null.

*

* @return The PasswordAuthentication collected from the

* user, or null if none is provided.

*/

@Override

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(userName, password.toCharArray());

}

}

 

我们需要覆盖java.net.Authenticator类的getPasswordAuthentication()方法,并返回一个PasswordAuthentication实例。要使他起作用,还需要设置

Authenticator.setDefault(new BasicAuthenticator(userName, password));

 

这样就提供了基于Http Basic的验证,接着就可以顺畅的使用需要验证的代理了。

 

之后,我们只需要连接好代理IP就可以成功访问外部的数据了。

关闭
19907977089
关注微信公众号,免费送30分钟时长