package com.bijian.study.httpclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.log4j.Logger;
public class HttpsTest {
protected static Logger logger = Logger.getLogger(HttpsTest.class);
private static final int SOCKET_TIME_OUT = 60000;
private static final int CONNECT_TIME_OUT = 60000;
private static RequestConfig getRequestConfig(int socketTimeout, int connectTimeout) {
return RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
}
private static RequestConfig getRequestConfig() {
return getRequestConfig(SOCKET_TIME_OUT, CONNECT_TIME_OUT);
}
private static List<NameValuePair> createParam(Map<String, Object> param) {
List<NameValuePair> nvps = new ArrayList <NameValuePair>();
if(param != null) {
for(String k : param.keySet()) {
nvps.add(new BasicNameValuePair(k, param.get(k).toString()));
}
}
return nvps;
}
/**
* 发送 HTTPS 请求
* @param url
* @param sMethod
* @param param
* @return
* @throws Exception
*/
public static String postForAppSSL(String url, String sMethod, Map<String, Object> params, Map<String, Object> headers) throws Exception {
try {
if(params != null) {
String result = postSSLUrlWithParams(url, params, headers);
if (result.indexOf("html") >=0){
return null;
}else{
return result;
}
}
return null;
} catch(Exception e) {
logger.error("post ssl error: ", e);
throw new Exception();
}
}
/**
* 无需本地证书keyStore的SSL https带参数请求
* @param url
* @param paramsMap
* @param encoding
* @return
*/
public static String postSSLUrlWithParams(String url, Map<String, Object> params, Map<String, Object> headers) {
//创建一个信任的连接
CloseableHttpClient httpClient = createSSLInsecureClient();
HttpPost httpPost = new HttpPost(url);
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try {
// 设置客户端请求的头参数getParams已经过时,现在用requestConfig对象替换
httpPost.setConfig(getRequestConfig());
Set<String> keys = headers.keySet();
for (String key : keys) {
httpPost.setHeader(key, headers.get(key).toString());
}
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
// 设置编码格式
httpPost.setEntity(new UrlEncodedFormEntity( createParam(params) , Charset.forName("utf-8")));
//发送请求
HttpResponse response = httpClient.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
br = new BufferedReader(new InputStreamReader(httpEntity.getContent(),"utf-8"));
String s = null;
while((s=br.readLine())!=null){
sb.append(s);
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("指定的编码集不对,您目前指定的编码集是:" + "utf-8");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
throw new RuntimeException("读取流文件异常",e);
}catch (Exception e) {
throw new RuntimeException("通讯未知系统异常",e);
}finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("---------------------------");
}
return sb.toString();
}
/**
* 创建一个SSL信任所有证书的httpClient对象
* @return
*/
public static CloseableHttpClient createSSLInsecureClient() {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
// 默认信任所有证书
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
return true;
}
}).build();
// AllowAllHostnameVerifier: 这种方式不对主机名进行验证,验证功能被关闭,是个空操作(域名验证)
SSLConnectionSocketFactory sslcsf = new SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return HttpClients.custom().setSSLSocketFactory(sslcsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
public static void main(String[] args) {
Map<String, Object> param=new HashMap<String, Object>();
param.put("pdata", "mm");
Map<String, Object> headers=new HashMap<String, Object>();
headers.put("appid", "mm");
postSSLUrlWithParams("http://localhost:8080/SpringMVC-httpclient/greeting", param, headers);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
SpringMVC-httpclient
共67个文件
jar:38个
class:7个
java:6个
需积分: 23 10 下载量 171 浏览量
2017-11-15
17:54:40
上传
评论
收藏 11.49MB RAR 举报
温馨提示
httpclient之用CloseableHttpClient发送post请求,有HTTP与HTTPS两种协议
资源推荐
资源详情
资源评论
收起资源包目录
SpringMVC-httpclient.rar (67个子文件)
SpringMVC-httpclient
WebContent
META-INF
MANIFEST.MF 39B
WEB-INF
web.xml 2KB
views
hello.jsp 351B
user.jsp 354B
springMVC-servlet.xml 1KB
lib
spring-web-4.1.1.RELEASE.jar 684KB
commons-collections-3.2.1.jar 562KB
jackson-core-2.4.3.jar 220KB
log4j-1.2.16.jar 470KB
ezmorph-1.0.jar 76KB
standard.jar 503KB
slf4j-api-1.7.7.jar 29KB
spring-aop-4.1.1.RELEASE.jar 351KB
spring-jms-4.1.1.RELEASE.jar 261KB
log4j-api-2.1.jar 130KB
httpmime-4.3.1.jar 36KB
spring-aspects-4.1.1.RELEASE.jar 55KB
commons-httpclient-3.1.jar 298KB
httpclient-4.3.1.jar 572KB
spring-orm-4.1.1.RELEASE.jar 365KB
morph-1.1.jar 286KB
spring-instrument-4.1.1.RELEASE.jar 7KB
httpcore-4.3.jar 276KB
spring-expression-4.1.1.RELEASE.jar 244KB
spring-test-4.1.1.RELEASE.jar 490KB
servlet-api.jar 239KB
commons-beanutils-1.9.2.jar 228KB
jackson-databind-2.4.3.jar 1.03MB
spring-context-4.1.1.RELEASE.jar 1003KB
log4j-slf4j-impl-2.1.jar 22KB
jstl.jar 21KB
spring-context-support-4.1.1.RELEASE.jar 173KB
log4j-core-2.1.jar 805KB
jackson-annotations-2.4.0.jar 38KB
spring-jdbc-4.1.1.RELEASE.jar 418KB
commons-logging-1.2.jar 60KB
spring-core-4.1.1.RELEASE.jar 981KB
log4j-web-2.1.jar 23KB
spring-beans-4.1.1.RELEASE.jar 687KB
log4j-1.2.17.jar 478KB
json-lib-2.4-jdk15.jar 155KB
spring-tx-4.1.1.RELEASE.jar 246KB
spring-webmvc-4.1.1.RELEASE.jar 757KB
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.core.resources.prefs 57B
org.eclipse.wst.common.component 512B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 503B
org.eclipse.jdt.core.prefs 395B
src
log4j2.xml 2KB
com
bijian
study
httpclient
HttpsTest.java 6KB
HttpTest.java 5KB
controller
dto
UserDTO.java 507B
HelloController.java 5KB
service
HelloService.java 246B
impl
HelloServiceImpl.java 910B
.project 1KB
.classpath 4KB
build
classes
log4j2.xml 2KB
com
bijian
study
httpclient
HttpsTest.class 9KB
HttpsTest$1.class 843B
HttpTest.class 6KB
controller
dto
UserDTO.class 1KB
HelloController.class 6KB
service
impl
HelloServiceImpl.class 2KB
HelloService.class 339B
共 67 条
- 1
资源评论
外外外
- 粉丝: 19
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功