下面小编就为大家带来一篇Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)利用HttpClient进行邮政请求(HTTPS)实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起小编过来看看吧
最近,需要对客户的接口做一个包装,然后供自己公司别的系统调用,客户接口是用HTTP URL实现的,我想用HttpClient包进行请求,同时由于请求的统一资源定位器是HTTPS的,为了避免需要证书,所以用一个类继承默认HttpClient类,忽略校验过程。
1.写一个SSLClient类,继承至HttpClient
包com。PC商城。服务。销售。苗更。impl
导入Java。安全。证明合格的证书异常;
导入Java。安全。证明合格的x509证书;
导入javax。网。SSL。SSL上下文;
导入javax。网。SSL。信托经理;
导入javax。网。SSL。x 509信托管理人;
导入org。阿帕奇。http。conn . clientconnectionmanager
导入org。阿帕奇。http。连接方案。方案;
导入org。阿帕奇。http。连接方案。方案登记处;
导入org。阿帕奇。http。连接SSL。sslsocketfactory
导入组织。阿帕奇。http。impl。客户。默认http客户端;
//用于进行Https请求的HttpClient
公共类SSLClient扩展了DefaultHttpClient{
公共SSLClient()引发异常{
super();
CTX=SSL上下文。getinstance(' TLS ');
x509信任管理器TM=新的x509信任管理器(){
@覆盖
public void checkClientTrusted(x509证书[]链,
字符串authType)引发证书异常{
}
@覆盖
public void checkserver trusted(x509证书[]链,
字符串authType)引发证书异常{
}
@覆盖
公共x509证书[]getAcceptedIssuers(){
返回空
}
};
ctx.init(null,new TrustManager[]{tm},null);
SSLSocketFactory SSF=新SSLSocketFactory(CTX,SSLSocketFactory .允许_全部_主机名_验证者);
ClientConnectionManager CCM=this。getconnectionmanager();
方案注册处Sr=CCM。getschemeregistry();
高级注册(新方案(' https ',443,SSF));
}
}
2.写一个利用HttpClient发送post请求的类
包com。PC商城。服务。销售。苗更。impl
导入Java。util。ArrayList
导入Java。util。迭代器;
导入Java。util。列表;
导入Java。util。地图;
导入Java。util。地图。词条;
导入org。阿帕奇。http。http实体;
导入org。阿帕奇。http。httpresponse
导入组织。阿帕奇。http。名称值对;
导入org。阿帕奇。http。客户。http客户端;
导入org。阿帕奇。http。客户。实体。urlencodedformentity
导入org。阿帕奇。http。客户。方法。http帖子;
导入组织。阿帕奇。http。消息。基本名称值对;
导入org。阿帕奇。http。util。实体效用;
/*
* 利用HttpClient进行邮政请求的工具类
*/
公共类HttpClientUtil {
公共字符串doPost(字符串url,映射字符串,字符串映射,字符串字符集){
HttpClient httpClient=null
HttpPost httpPost=null
字符串结果=空
尝试{
http client=new SSL client();
http post=新http post(URL);
//设置参数
ListNameValuePair list=new ArrayListNameValuePair();
迭代器iterator=map.entrySet().迭代器();
while(iterator.hasNext()){
EntryString,String elem=(EntryString,String)迭代器。next();
列表。添加(新的基本名称值对(elem。getkey()、elem。getvalue()));
}
if(list.size() 0){
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(list,charset);
httpPost.setEntity(实体);
}
HttpResponse响应=http客户端。执行(http post);
如果(回应!=null){
HttpEntity resEntity=response。获取实体();
如果(冤仇!=null){
结果=实体效用。tostring(resEntity,charset);
}
}
}catch(Exception ex){
前任。printstacktrace();
}
返回结果;
}
}
3.调用post请求的测试代码
包com。PC商城。服务。销售。苗更。impl
导入Java。util。hashmap
导入java.util.Map:
//对接口进行测试
公共类测试[
私有字符串URL=' 339 XXX。XXX。XXX/';
私有字符串charset=' utf-8 ';
私有http客户端util http客户端util=null:
公共测试()方法。]
http client util=new http client util();
}
公共无效测试()
httporgcreatetest字符串=URL“XXX/XXX/delivery”;
MapString,string create map=new hashmap string,string();
createMap.put('delivery_code ',' 1d 1 qz 222 z22 sm 21a ');
createMap.put('时间戳',' 1479198840000 ');
createMap.put('sign ',' f 2109 c 333 F3 EAD 929 f 932 e 89703 fa 0 f 683d 43 EB ');
httporgcreatetestrtn字符串=http客户端实用程序。dopost(httporgy createtest、createMap、charset);
系统。出去。println(' result:' httprocreatestrtn ');
}
public static void main(string[]args)>
testmain main=新testmain
main.test()。
}
}
刚开始不是很明白基本名称值对对的用法,后来慢慢摸索了一下,发现基本名称值对对是存储键值对的类,当添加新的关键点和价值(值)值,它会自动给装换成http(http)的格式,=表示和符号,比如339 XXX。XXX。XXX/XXX/xxxx/交付?delivery _ code=dz zsm 2 atimes tamp=1479198840000 sign=f209 c33 FEA 99 f93和8970FA0F68D3EB,我们都不用自己进行拼接和匹配了,个人觉得它用起来还是挺方便而且准确度也高,希望可以帮助到大家!
以上就是小编为大家带来的Java(Java)利用http客户端(http客户端)进行员额配置表请求(HTTPS)实例全部内容了,希望大家多多支持我们~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。