httpClient使用说明

来源:互联网 发布:老域名 编辑:程序博客网 时间:2024/05/17 22:26
 

一.搭建环境

使用MyEclipse创建一个工程(web工程或java工程),把“httpClient所需jar包”目录下边的jar包都引入新创建的工程后,环境就搭建完成了。

二.httpClient Post请求

private String postClient(String actionUrl)throws Exception{

HttpClient httpclients = new HttpClient();

//防止https请求终止

Protocol myhttps = new Protocol("https", new 

MySecureProtocolSocketFactory(), 443);

Protocol.registerProtocol("https", myhttps);

    

    //创建post模型

PostMethod postmethod = new PostMethod(actionUrl);

postmethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gbk");

postmethod.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");

postmethod.getParams().setContentCharset("gbk");

postmethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));

postmethod.addParameter("orderTime", "");//post参数,可增加多个参数

//7.发送报文

httpclients.executeMethod(postmethod);

System.out.println("------- 客户端请求完毕 -------");

// byte[] responsbody = postmethod.getResponseBody(); //获得服务器返回信息

String retValue = postmethod.getResponseBodyAsString(); //获得服务器返回信息,以字符串形式返回

return retValue;

}

三.httpClient Get请求

private String getClient(String actionUrl)throws Exception{

HttpClient httpclients = new HttpClient();

//防止https请求终止

Protocol myhttps = new Protocol("https", new DefaultProtocolSocketFactory(), 443);

    Protocol.registerProtocol("https", myhttps);

    //创建get模型

    GetMethod  getmethod = new GetMethod(actionUrl);

    getmethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gbk");

    getmethod.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");

    getmethod.getParams().setContentCharset("gbk");

    getmethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));

//7.发送报文

httpclients.executeMethod(getmethod);

System.out.println("------- 客户端请求完毕 -------");

// byte[] responsbody = postmethod.getResponseBody(); //获得服务器返回信息

String retValue = getmethod.getResponseBodyAsString();//获得服务器返回信息,以字符串形式返回

return retValue;

}

四.httpClient 访问https连接,注册证书

有些时候需要通过https协议访问服务器,这时就存在一个证书验证的问题。

笔者一般证书验证问题分为三类:

1.第一类比较好解决

有一些https访问时可以通过增加两行代码来设置“不验证服务器”,以达到成功访问的目的。//防止https请求终止

Protocol myhttps = 

new Protocol("https", new DefaultProtocolSocketFactory(), 443);

Protocol.registerProtocol("https", myhttps);

2.第二类客户端验证服务器

即:客户端在发起请求时,会验证服务器连接是否是信任的。如果在javakeystore中找不到服务器证书,则认为此服务器连接不被信任,请求终止。

解决方法:

第一步:通过浏览器下载导出服务器证书,一般为.cer 或 .crt 格式,通过java自带的keytool 命令将证书导入到cacerts 文件中。 具体操作,详见《https访问java证书注册》文档

第二步:增加一下两行代码

//防止https请求终止

Protocol myhttps = 

new Protocol("https", new DefaultProtocolSocketFactory(), 443);

Protocol.registerProtocol("https", myhttps);

3.第三类客户端验证服务器,服务器验证客户端

即:客户端在发起请求时,会验证服务器连接是否是信任的。如果在javakeystore中找不到服务器证书,则认为此服务器连接不被信任,请求终止。如果客户端验证通过,请求发到服务器端,服务器也要做类似的验证,验证客户端是否被信任。如果客户端属于信任列表,则允许请求。否则请求终止。

解决方法:

第一步:获得客户端证书

客户端证书应和服务提供商联系,得到客户端证书。一般格式为:.pfx 或 .p12 格式。

第二步:获得服务端证书

通过浏览器下载或和服务提供商联系联系,得到服务器证书。一般为.cer 或 .crt 格式。

第三步:我们需要将服务器证书导入到keystore中,在这里我们新建一个keystore。使用keytool命令可以新建。或者使用《修改keystoreGUI工具》进行新建。必须为jks格式。密码自行设置。我这里keystore名字为:joyoService.jks,设置密码为:password;新建成功后,将服务器证书导入到joyoService.jks中。

第四步:代码修改

//注册证书

Protocol authhttps = new Protocol("https",  

new AuthSSLProtocolSocketFactory(

new URL("file:///C:/certificate/client/joyo.p12"), "password","pkcs12",//客户端

new URL("file:///c:/certificate/joyoService.jks"), "password","jks"), 443); //服务端

Protocol.registerProtocol("https", authhttps);

几行代码需要解释一下,第三行注册客户端证书,

第一个参数:

new URL("file:///C:/certificate/client/joyo.p12") //客户端证书url

第二个参数:"password" //客户端证书密码

第三个参数:"pkcs12" //客户端证书格式,不用修改

第四行注册服务端证书,

第一个参数:

new URL("file:///c:/certificate/joyoService.jks") //服务端keystore url

第二个参数:"password" //服务端keystore 密码

第三个参数:"jks" //服务端keystore 格式,不用修改

原创粉丝点击