httpclient 4.3及以上版本,发送和接收https
来源:互联网 发布:sql数据库删除后恢复 编辑:程序博客网 时间:2024/05/21 14:47
关于证书的生成,请参考:双向认证,证书生成方法
方法一:数据以json的格式发送
public void testHttps(){
try {
String url ="https://localhost:8443/mips/QueryBasicInfo";
String json ="{\"TT1\":\"isen\",\"TT2\":\"02E18F\",\"T06\":\"32\"}";
testHttpsPost(url,json);
} catch (Exception e) {
e.printStackTrace();
}
}
private void testHttpsPost(String url,String json) {
finalString KEY_STORE_TYPE_BKS = "bks";//android用bks
finalString KEY_STORE_TYPE_KKS = "jks";//java用bks
finalString KEY_STORE_TYPE_P12 = "PKCS12";
finalString SCHEME_HTTPS = "https";
finalint HTTPS_PORT = 8444;
finalString KEY_STORE_CLIENT_PATH = "D:\\client.key.p12";
finalString KEY_STORE_TRUST_PATH = "D:\\client.jks";
finalString KEY_STORE_PASSWORD = "client1234";
finalString KEY_STORE_TRUST_PASSWORD = "client321";
KeyStorekeyStore;
KeyStoretrustStore;
try{
//服务器端需要验证的客户端证书
keyStore= KeyStore.getInstance(KEY_STORE_TYPE_P12);//KeyStore.getDefaultType()
//客户端信任的服务器端证书
trustStore= KeyStore.getInstance(KEY_STORE_TYPE_KKS);
FileInputStreamksIn = new FileInputStream(new File(KEY_STORE_CLIENT_PATH));
FileInputStreamtsIn = new FileInputStream(new File(KEY_STORE_TRUST_PATH));
try{
keyStore.load(ksIn,KEY_STORE_PASSWORD.toCharArray());
trustStore.load(tsIn,KEY_STORE_TRUST_PASSWORD.toCharArray());
}catch (Exception e) {
e.printStackTrace();
}finally {
try{
ksIn.close();
}catch (Exception ignore) {
}
try{
tsIn.close();
}catch (Exception ignore) {
}
}
SSLContextsslcontext = null;
try{
sslcontext= SSLContexts
.custom()
.loadKeyMaterial(keyStore,KEY_STORE_PASSWORD.toCharArray())
.loadTrustMaterial(trustStore, newTrustSelfSignedStrategy())
.build();
}catch (UnrecoverableKeyException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
SSLConnectionSocketFactorysslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] {"TLSv1" },
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
CloseableHttpClienthttpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
StringAPPLICATION_JSON = "application/json";
String CONTENT_TYPE_TEXT_JSON = "text/json";
HttpPosthttpPost = new HttpPost(url);
// json =URLEncoder.encode(json, "UTF_8"); //如果需要转码,则取消注释
StringEntity se = new StringEntity(json);
se.setContentType(CONTENT_TYPE_TEXT_JSON);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,APPLICATION_JSON));
httpPost.setEntity(se);
CloseableHttpResponse httpResponse =httpClient.execute(httpPost);
System.out.println(httpResponse.toString());
try{
HttpEntityentity = httpResponse.getEntity();
System.out.println("-------------------------------------");
System.out.println(httpResponse.getStatusLine());
System.out.println(EntityUtils.toString(entity));//EntityUtils.toString(entity, "utf-8
EntityUtils.consume(entity);
}catch (Exception e) {
//TODO: handle exception
e.printStackTrace();
}finally {
httpPost.releaseConnection();
httpResponse.close();
}
}catch (KeyManagementException e) {
e.printStackTrace();
}catch (KeyStoreException e) {
e.printStackTrace();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
方法二:数据以http参数的格式发送
public void testHttps(){
Content content = null;
try {
String url ="https://localhost:8443/mips/QueryBasicInfo";
List<NameValuePair>params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("TT1","isen"));
params.add(newBasicNameValuePair("TT1", "02E18F"));
params.add(newBasicNameValuePair("TT3", "32"));
testHttpsPost(url,params);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("content:"+ content.asString());
}
private void testHttpsPost(String url,List<NameValuePair> params) {
final StringKEY_STORE_TYPE_BKS = "bks";//android用bks
final StringKEY_STORE_TYPE_KKS = "jks";//java用bks
final String KEY_STORE_TYPE_P12= "PKCS12";
final StringSCHEME_HTTPS = "https";
final int HTTPS_PORT =8444;
final StringKEY_STORE_CLIENT_PATH = "D:\\client.key.p12";
final StringKEY_STORE_TRUST_PATH = "D:\\client.jks";
final StringKEY_STORE_PASSWORD = "client1234";
final StringKEY_STORE_TRUST_PASSWORD = "client321";
KeyStore keyStore;
KeyStore trustStore;
try {
// 服务器端需要验证的客户端证书
keyStore =KeyStore.getInstance(KEY_STORE_TYPE_P12);//KeyStore.getDefaultType()
// 客户端信任的服务器端证书
trustStore =KeyStore.getInstance(KEY_STORE_TYPE_KKS);
FileInputStreamksIn = new FileInputStream(new File(KEY_STORE_CLIENT_PATH));
FileInputStreamtsIn = new FileInputStream(new File(KEY_STORE_TRUST_PATH));
try {
keyStore.load(ksIn,KEY_STORE_PASSWORD.toCharArray());
trustStore.load(tsIn,KEY_STORE_TRUST_PASSWORD.toCharArray());
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
ksIn.close();
}catch (Exception ignore) {
}
try {
tsIn.close();
}catch (Exception ignore) {
}
}
SSLContextsslcontext = null;
try {
sslcontext= SSLContexts
.custom()
.loadKeyMaterial(keyStore,KEY_STORE_PASSWORD.toCharArray())
.loadTrustMaterial(trustStore, newTrustSelfSignedStrategy())
.build();
} catch(UnrecoverableKeyException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
SSLConnectionSocketFactorysslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
CloseableHttpClienthttpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
HttpPosthttppost = new HttpPost(url);
httppost.setEntity(newUrlEncodedFormEntity(params));
CloseableHttpResponse httpResponse =httpClient.execute(httppost);
System.out.println(httpResponse.toString());
try {
HttpEntityentity = httpResponse.getEntity();
System.out.println("-------------------------------------");
System.out.println(httpResponse.getStatusLine());
System.out.println(EntityUtils.toString(entity));//EntityUtils.toString(entity, "utf-8
EntityUtils.consume(entity);
} catch(Exception e) {
//TODO: handle exception
e.printStackTrace();
} finally {
httppost.releaseConnection();
httpResponse.close();
}
} catch(KeyManagementException e) {
e.printStackTrace();
} catch(KeyStoreException e) {
e.printStackTrace();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
- httpclient 4.3及以上版本,发送和接收https
- httpclient 4.3及以上版本,发送和接收https
- HttpClient 之 4.x.x版本以上的发送Https请求
- HttpClient 4.3 发送HTTPS
- HttpClient使用详解(4.3.X以上版本)
- HTTPClient 发送HTTPS请求
- httpClient发送https请求
- 使用afnetworking和网络服务接口及soap发送并接收http/https请求:
- JAVA发送HttpClient请求及接收请求结果过程
- JAVA发送HttpClient请求及接收请求结果过程
- JAVA发送HttpClient请求及接收请求结果过程
- JAVA发送HttpClient请求及接收请求结果过程
- JAVA发送HttpClient请求及接收请求结果过程
- HttpClient和HttpUrlConnection实现post发送和接收json数据
- 简单的使用httpclient调接口发送和接收JSon
- HttpClient学习笔记 --发送Http和Https请求
- HttpClient4.3.6版本以上的http和https请求写法
- HttpClient 发送 HTTP、HTTPS 请求
- 40+ Sublime Text 最佳插件汇总
- js split 的用法和定义 js split分割字符串成数组的实例代码
- 最简单的三角形
- Android开发笔记(五十一)通过Messenger实现进程间通信
- sed的基本用法
- httpclient 4.3及以上版本,发送和接收https
- navigationController pushViewController 多次跳转后怎么返回
- iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD
- SVN使用教程总结
- Android系统源码学习步骤
- 使用rapidjson生成json串
- 华信培训1.17
- 区分 C++ 指针跟引用
- KVC简单用法