httpClient4.1发送https报文请求,带证书,签名

这个方法时我测试了目前网上的commons-httpclient所提供的方法,根据HTTP请求改造的,那个测试没有通过,这个是完全根据官方最新版的httpclinet4.1的英文文档以及example来做的,比较靠谱,当前前提是你的证书已经拆分好,这个可以找到相关的很多资料,不做赘述。发送代码如下

[java]  view plain copy
  1. org.apache.http.client.HttpClient hc = new org.apache.http.impl.client.DefaultHttpClient();  
  2.              List <NameValuePair> nvps = new ArrayList <NameValuePair>();  
  3.             nvps.add(new BasicNameValuePair("uerName", yourNameValue);  
  4.             nvps.add(new BasicNameValuePair("userCode", yourUserCodeValue);  
  5.             //请根据实际修改上送包xml数据,POST请求没有长度限制,get请求太长会报错,根据实际情况,一般的数据传送会要求进行签名、BASE64编码或者压缩等机制进行传输  
  6.             nvps.add(new BasicNameValuePair("reqData",getrevFromBASE64(body.getBytes("GBK"))));    
  7.             UrlEncodedFormEntity   urlEncodedFormEntity = new UrlEncodedFormEntity(nvps,"GBK");  
  8.             String url = "https://"+yourConnectIp+":"+yourConnectPort;  
  9.             //加载证书  
  10.             java.security.KeyStore trustStore = java.security.KeyStore.getInstance(java.security.KeyStore.getDefaultType());  
  11.             //"123456"为制作证书时的密码  
  12.             trustStore.load(new FileInputStream(new File("你的证书位置")), "123456".toCharArray());  
  13.             org.apache.http.conn.ssl.SSLSocketFactory socketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(trustStore);  
  14.             //不校验域名  
  15.             socketFactory.setHostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
  16.             //这个8446是和被访问端约定的端口,一般为443  
  17.             org.apache.http.conn.scheme.Scheme sch = new org.apache.http.conn.scheme.Scheme("https", socketFactory, 8446);  
  18.             hc.getConnectionManager().getSchemeRegistry().register(sch);  
  19.             org.apache.http.client.methods.HttpPost hr = new org.apache.http.client.methods.HttpPost(url);  
  20.   
  21.             hr.setEntity(urlEncodedFormEntity);  
  22.             hr.setHeader("Content-Type""application/x-www-form-urlencoded");  
  23.             org.apache.http.HttpResponse hres = hc.execute(hr);  
  24.             org.apache.http.HttpEntity entity = hres.getEntity();  
  25.             re_code = hres.getStatusLine().statusCode;  
  26.             if (re_code == 200) {  
  27.             //your successCode here  
  28.             String repMsg = org.apache.http.util.EntityUtils.toString(entity,"GBK");  
  29.             }else{  
  30.             //your failCode here  
  31.             }  
  32.               
  33.   最后,根据实际需要,解析返回报文,决定是否去关闭连接   

我资源里有免费下载地址    http://download.csdn.net/detail/tsytdhs163/4241756

你可能感兴趣的:(httpClient4.1发送https报文请求,带证书,签名)