Java HTTP代理设置以及认证

代理设置

java http/https设置代理有两种方式:使用系统属性设置以及使用Proxy设置。

使用系统属性设置代理

String PROXY_HOST = "127.0.0.1";//代理服务器地址
String PROXY_PORT = "80";//代理服务器端口
 
//HTTP代理
System.setProperty("http.proxyHost", PROXY_HOST); 
System.setProperty("http.proxyPort", PROXY_PORT);
 
//HTTPS代理
System.setProperty("https.proxyHost", PROXY_HOST);        
System.setProperty("https.proxyPort", PROXY_PORT);

使用系统属性设置代理是全局,应用程序里所有的http/https请求都会发往代理服务器,由代理服务器向目标服务器完成请求。

如果部分http/https请求不需要经过代理,可以使用系统属性‘nonProxyHosts’设置,它的值可以为主机列表,主机之间使用“|”分隔,也可以使用*号匹配多个主机。

Java网络属性参考:Networking Properties

使用Proxy设置代理

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)); 
URLConnection conn = url.openConnection(proxy);

与使用系统属性设置全局代理不同,使用proxy可以为请求使用不同的代理。

认证

有些代理服务主机需要客户机认证。

全局认证

Java使用jave.net.Authenticator提供网络连接的认证信息,Authenticator是一个抽象类,它需要子类实现getPasswordAuthentication()方法来提供用于认证的密码信息。

示例:

public class BasicAuthenticator extends Authenticator { 
  String userName; 
  String password; 

  public BasicAuthenticator(String userName, String password) { 
    this.userName = userName; 
    this.password = password; 
  }

  @Override 
  protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(userName, password.toCharArray()); 
  } 
}

除了实现Authenticator类外,还需要调用Authenticator的setDefault()方法来注册BasicAutheticator实例。

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

注册的这个实例是系统全局的。所有请求都会提供由BasicAutheticator的Basic认证的信息。

请求头信息认证

除了使用java的jave.net.Authenticator提供的全局认证外,也可以在请求头信息里包含认证信息。

String headerKey = "Proxy-Authorization";
String encoded = new String(Base64.encodeBase64((new String(username + ":" + password).getBytes())));
String headerValue = "Basic " + encoded;
conn.setRequestProperty(headerKey, headerValue);

版权声明:著作权归作者所有。

相关推荐

nginx配置Basic认证

最近在搭建kibana时,发现kibana是没有提供认证功能,所以想到给它加一个认证,最简单的就是basic auth认证。下面记录下nginx配置basic认证的过程。添加Basic Auth认证需要先创建密码文件,这里使用htpasswd。如果没有找到htpasswd命令,可以先安装httpd-tools。安装httpd-toolsyum install 

Django响应http请求返回JSON数据

首先使用字典结构存放数据,例如返回错误信息:import json from django.http import HttpResponse response_data = {} response_data['result'] = 'error' response_data['message'] =&nb

JavaScript使用window.print()打印页面:样式设置、精确分页以及局部打印

大部分浏览器提供打印页面的功能,直接使用浏览器的打印功能是直接将整个页面打印出来,并且是自动分页。很多时候直接打印整个页面并不能满足我们的需要。有三方面的需求我们可能要考虑:样式设置:打印的样式和页面显示的样式不同,需要对设置打印样式。精确分页:需要根据具体的内容进行精确分页。局部打印:不需要打印整个页面,只需要打印页面的部分。html示例<!doctype html> &l

Jenkins集成Git ssh key密钥认证

Jenkins有两种方法集成Git的ssh key认证:这种方法很简单,只要把私钥拷贝到jenkins用户的~/.ssh目录,当git使用ssh访问仓库时会尝试使用此私钥。1、切换为jenkins用户$sudo su jenkins 2、创建.ssh目录,已存在目录忽略此步$cd ~ $mkdir .ssh 3、创建访问git的ssh k

Java奇偶数更新版本的区别以及安装版本选择

在Oracle Java下载页面,我们会看到有两个版本的JDK下载,如JDK 8的8u151和8u152。Java在每一次发布会有两个更新版本:CPU(Critical Patch Update ):重要补丁更新。PSU(Patch Set Update):补丁集更新 。重要补丁更新 (CPU) 包含安全漏洞

Nginx重定向http到https

Nginx重定向http到https:方法一【推荐】使用响应码301,301内容参考HTTP 301 Moved Permanently。server {     listen         [::]:80;  &nb