您的位置 首页 java

HTTP请求:如何通过Java在HTTP连接中使用代理

在开发过程中,面对与其他系统的对接,目前很多的对接方式都是采取的RESTful风格的Http请求,市面上也有许多的工具类可供我们去发起Http请求,接收响应。那么大家知道吗?若网络是需要代理的时候,我们该如何进行Http访问呢。下面我们来赘述一下:

HTTP请求:如何通过Java在HTTP连接中使用代理

发起请求

大部分Http工具类,比如百度就能看到的一些示例代码,一般发起Http请求,都是通过 openConnection()或者openStream()的方式,来创建连接的。

普通情况下,已经是可以满足了,当遇到代理网络的情况时,就会发现连接是不通的。

我们需要在创建连接之前,做一些小动作:

设置代理地址

在openConnection()或openStream()之前,我们需要增加以下2行代码:

 // PROXY_HOST:代理的IP地址
System.setProperty("proxyHost", PROXY_HOST); 
// PROXY_PORT:代理的端口号
System.setProperty("proxyPort", PROXY_PORT);   

从而指定网络代理的ip和端口号。

设置代理验证

当代理需要验证的时候,也就是需要账户和密码,我们指定账户名和密码:

 // PROXY_USERNAME:代理账户名
// 或者 System.setProperty("proxyUsername", PROXY_USERNAME);
System.setProperty("proxyUser", PROXY_USERNAME); 
// PROXY_PASSWORD:密码
System.setProperty("proxyPassword", PROXY_PASSWORD);  

如果你认为加上以上两行代码就行,那就错了,他还需要另外的一个操作:

就是需要 java.net.Authenticator 类来完成一般的Http验证。

那么我们如何使用这个类来进行验证呢:

十分简单,我们需要创建一个继承自 java.net.Authenticator的子类,通过这个子类来帮助我们实现Http代理的验证

 class BasicAuthenticator extends Authenticator {
	private String userName;
	private 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());
 	}
}  

并在发起请求之前加入如下代码即可:

 Authenticator.setDefault(new BasicAuthenticator(PROXY_USERNAME, PROXY_PASSWORD));  

之后我们进行Http请求都将进行代理的设置和验证,从而满足我们的代理网络下的Http请求功能。

文章来源:智云一二三科技

文章标题:HTTP请求:如何通过Java在HTTP连接中使用代理

文章地址:https://www.zhihuclub.com/180822.shtml

关于作者: 智云科技

热门文章

评论已关闭

10条评论

  1. Thanks a lot, I value this.
    original essay writing service using essay writing service

  2. You made your stand extremely effectively..
    tropicana online casino online casino texas

  3. Seriously loads of helpful material!
    writing a persuasive essay superior essay writers

  4. Thanks a lot! Lots of tips.
    pay to write my essay for me someone write my essay for free

  5. Truly lots of awesome data!
    paper writing service reddit best cheap essay writing service

  6. Terrific facts. Appreciate it!
    writing a good essay university personal statement writing service

网站地图