普通的get和post请求只能执行http的请求,遇到的了https的就歇菜了,需要SSL安全证书处理。

该方法只能用jdk1.7和1.8进行处理,jdk1.6会报Could not generate DH keypair的错误。

1、引入相关依赖包

jar包下载:httpcore4.5.5.jar    fastjson-1.2.47.jar

maven:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>

2、主要类HttpClientService

  1 package com.sinotn.service;
2
3 import com.alibaba.fastjson.JSONObject;
4 import org.apache.http.HttpEntity;
5 import org.apache.http.NameValuePair;
6 import org.apache.http.client.entity.UrlEncodedFormEntity;
7 import org.apache.http.client.methods.CloseableHttpResponse;
8 import org.apache.http.client.methods.HttpGet;
9 import org.apache.http.client.methods.HttpPost;
10 import org.apache.http.client.utils.URIBuilder;
11 import org.apache.http.entity.StringEntity;
12 import org.apache.http.impl.client.CloseableHttpClient;
13 import org.apache.http.impl.client.HttpClients;
14 import org.apache.http.message.BasicHeader;
15 import org.apache.http.message.BasicNameValuePair;
16 import org.apache.http.util.EntityUtils;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19 import java.util.ArrayList;
20 import java.util.List;
21
22 /**
23 * HttpClient发送GET、POST请求
24 * @Author libin
25 * @CreateDate 2018.5.28 16:56
26 */
27 public class HttpClientService {
28
29 private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class);
30 /**
31 * 返回成功状态码
32 */
33 private static final int SUCCESS_CODE = 200;
34
35 /**
36 * 发送GET请求
37 * @param url 请求url
38 * @param nameValuePairList 请求参数
39 * @return JSON或者字符串
40 * @throws Exception
41 */
42 public static Object sendGet(String url, List<NameValuePair> nameValuePairList) throws Exception{
43 JSONObject jsonObject = null;
44 CloseableHttpClient client = null;
45 CloseableHttpResponse response = null;
46 try{
47 /**
48 * 创建HttpClient对象
49 */
50 client = HttpClients.createDefault();
51 /**
52 * 创建URIBuilder
53 */
54 URIBuilder uriBuilder = new URIBuilder(url);
55 /**
56 * 设置参数
57 */
58 uriBuilder.addParameters(nameValuePairList);
59 /**
60 * 创建HttpGet
61 */
62 HttpGet httpGet = new HttpGet(uriBuilder.build());
63 /**
64 * 设置请求头部编码
65 */
66 httpGet.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
67 /**
68 * 设置返回编码
69 */
70 httpGet.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
71 /**
72 * 请求服务
73 */
74 response = client.execute(httpGet);
75 /**
76 * 获取响应吗
77 */
78 int statusCode = response.getStatusLine().getStatusCode();
79
80 if (SUCCESS_CODE == statusCode){
81 /**
82 * 获取返回对象
83 */
84 HttpEntity entity = response.getEntity();
85 /**
86 * 通过EntityUitls获取返回内容
87 */
88 String result = EntityUtils.toString(entity,"UTF-8");
89 /**
90 * 转换成json,根据合法性返回json或者字符串
91 */
92 try{
93 jsonObject = JSONObject.parseObject(result);
94 return jsonObject;
95 }catch (Exception e){
96 return result;
97 }
98 }else{
99 LOGGER.error("HttpClientService-line: {}, errorMsg{}", 97, "GET请求失败!");
100 }
101 }catch (Exception e){
102 LOGGER.error("HttpClientService-line: {}, Exception: {}", 100, e);
103 } finally {
104 response.close();
105 client.close();
106 }
107 return null;
108 }
109
110 /**
111 * 发送POST请求
112 * @param url
113 * @param nameValuePairList
114 * @return JSON或者字符串
115 * @throws Exception
116 */
117 public static Object sendPost(String url, List<NameValuePair> nameValuePairList) throws Exception{
118 JSONObject jsonObject = null;
119 CloseableHttpClient client = null;
120 CloseableHttpResponse response = null;
121 try{
122 /**
123 * 创建一个httpclient对象
124 */
125 client = HttpClients.createDefault();
126 /**
127 * 创建一个post对象
128 */
129 HttpPost post = new HttpPost(url);
130 /**
131 * 包装成一个Entity对象
132 */
133 StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8");
134 /**
135 * 设置请求的内容
136 */
137 post.setEntity(entity);
138 /**
139 * 设置请求的报文头部的编码
140 */
141 post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
142 /**
143 * 设置请求的报文头部的编码
144 */
145 post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
146 /**
147 * 执行post请求
148 */
149 response = client.execute(post);
150 /**
151 * 获取响应码
152 */
153 int statusCode = response.getStatusLine().getStatusCode();
154 if (SUCCESS_CODE == statusCode){
155 /**
156 * 通过EntityUitls获取返回内容
157 */
158 String result = EntityUtils.toString(response.getEntity(),"UTF-8");
159 /**
160 * 转换成json,根据合法性返回json或者字符串
161 */
162 try{
163 jsonObject = JSONObject.parseObject(result);
164 return jsonObject;
165 }catch (Exception e){
166 return result;
167 }
168 }else{
169 LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!");
170 }
171 }catch (Exception e){
172 LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e);
173 }finally {
174 response.close();
175 client.close();
176 }
177 return null;
178 }
179
180 /**
181 * 组织请求参数{参数名和参数值下标保持一致}
182 * @param params 参数名数组
183 * @param values 参数值数组
184 * @return 参数对象
185 */
186 public static List<NameValuePair> getParams(Object[] params, Object[] values){
187 /**
188 * 校验参数合法性
189 */
190 boolean flag = params.length>0 && values.length>0 && params.length == values.length;
191 if (flag){
192 List<NameValuePair> nameValuePairList = new ArrayList<>();
193 for(int i =0; i<params.length; i++){
194 nameValuePairList.add(new BasicNameValuePair(params[i].toString(),values[i].toString()));
195 }
196 return nameValuePairList;
197 }else{
198 LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 197, "请求参数为空且参数长度不一致");
199 }
200 return null;
201 }
202 }

3、调用方法

 1 package com.sinotn.service.impl;
2
3 import com.sinotn.service.HttpClientService;
4 import org.apache.http.NameValuePair;
5
6 import java.util.List;
7
8 /**
9 * 发送post/get 测试类
10 */
11 public class Test {
12
13 public static void main(String[] args) throws Exception{
14 String url = "要请求的url地址";
15 /**
16 * 参数值
17 */
18 Object [] params = new Object[]{"param1","param2"};
19 /**
20 * 参数名
21 */
22 Object [] values = new Object[]{"value1","value2"};
23 /**
24 * 获取参数对象
25 */
26 List<NameValuePair> paramsList = HttpClientService.getParams(params, values);
27 /**
28 * 发送get
29 */
30 Object result = HttpClientService.sendGet(url, paramsList);
31 /**
32 * 发送post
33 */
34 Object result2 = HttpClientService.sendPost(url, paramsList);
35
36 System.out.println("GET返回信息:" + result);
37 System.out.println("POST返回信息:" + result2);
38 }
39 }

4、对于发送https

为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。

写一个SSLClient类,继承至HttpClient

 1 import java.security.cert.CertificateException;
2 import java.security.cert.X509Certificate;
3 import javax.net.ssl.SSLContext;
4 import javax.net.ssl.TrustManager;
5 import javax.net.ssl.X509TrustManager;
6 import org.apache.http.conn.ClientConnectionManager;
7 import org.apache.http.conn.scheme.Scheme;
8 import org.apache.http.conn.scheme.SchemeRegistry;
9 import org.apache.http.conn.ssl.SSLSocketFactory;
10 import org.apache.http.impl.client.DefaultHttpClient;
11 //用于进行Https请求的HttpClient
12 public class SSLClient extends DefaultHttpClient{
13 public SSLClient() throws Exception{
14 super();
15 SSLContext ctx = SSLContext.getInstance("TLS");
16 X509TrustManager tm = new X509TrustManager() {
17 @Override
18 public void checkClientTrusted(X509Certificate[] chain,
19 String authType) throws CertificateException {
20 }
21 @Override
22 public void checkServerTrusted(X509Certificate[] chain,
23 String authType) throws CertificateException {
24 }
25 @Override
26 public X509Certificate[] getAcceptedIssuers() {
27 return null;
28 }
29 };
30 ctx.init(null, new TrustManager[]{tm}, null);
31 SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
32 ClientConnectionManager ccm = this.getConnectionManager();
33 SchemeRegistry sr = ccm.getSchemeRegistry();
34 sr.register(new Scheme("https", 443, ssf));
35 }
36 }

5、对于https调用

java 执行https的请求的更多相关文章

  1. 解决java使用https协议请求出现证书不信任问题(PKIX path building failed)

    解决https请求时出现pkix path building fail错误 方法 将submail.cer 安全证书导入到java中的cacerts证书库 (sumail是我从https://api. ...

  2. java实现https ssl请求url

    import java.io.*;import java.net.*;import java.security.*;import java.security.cert.*;import java.ut ...

  3. java 实现https请求

    java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从 ...

  4. java https post请求并忽略证书,参数放在body中

    1 新建java类,作用是绕过证书用 package cn.smartercampus.core.util; import java.security.cert.CertificateExceptio ...

  5. HTTPS那些事 用java实现HTTPS工作原理

    HTTPS那些事 用java实现HTTPS工作原理 博客分类: java历险   今天被问到关于https原理的问题,结果由于知识掌握不牢靠,停留于表面,很多细节都无法回答清楚,于是决定把https的 ...

  6. Java访问HTTPS时证书验证问题

    为了尽可能避免安全问题,公司的很多系统服务都逐步https化,虽然开始过程会遇到各种问题,但趋势不改.最完美的https应用是能实现双向认证,客户端用私钥签名用服务端公钥加密,服务端用私钥签名客户端都 ...

  7. Java执行JavaScript代码

    Java执行JavaScript代码 这篇文章主要为大家详细介绍了Java执行JavaScript代码的具体操作方法,感兴趣的小伙伴们可以参考一下 我们要在Java中执行JavaScriptMetho ...

  8. java ssl https 连接详解 生成证书 tomcat keystone

    java ssl https 连接详解 生成证书 我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over ...

  9. axios 同时执行多个请求

    http://chuansong.me/n/394228451820 同时执行多个请求 axios.all([ axios.get('https://api.github.com/xxx/1'), a ...

随机推荐

  1. 输入,输出与Mad Libs游戏

    name1=input('请输入一个名字') name2=input('请输入一个名字') car=input('请输入一种车子') print('饥饿的{}看到{}穿着三级甲骑着{}下山'.form ...

  2. ASP.NET 创建WebService——简单例子

    Web service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,也是一种web服务 WebService的特性有以下几点: 1.使用XML(标准通用标记语言)来作为数据交互 ...

  3. poj 3422 最小费用流

    如果不是从费用流区做这个题几乎不会想到用费用流 点有权值很容易想到拆点 问题是求最大sum ...  把权值取负 这样最小费用流的相反数就是最大sum 源点S汇点T k为移动次数 矩阵中的点拆成入点出 ...

  4. C++类中的Static关键字

    静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用.   或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...

  5. linux权限字母的含义

    无 --- 只能列出文件 r-- 访问文件 r-x 创建和删除文件 rwx

  6. 关于JQuery中$.get()和$.post()和$.ajax()的区别和使用

    首先,这三个方法都是Ajax方法中一种与服务器交换数据的请求类型. 一.$.get() $.get() 方法使用 HTTP GET 请求从服务器加载数据. 使用格式: $.get(url,[data] ...

  7. kubernetes in action - Replication Controller

    理解这个问题,就是pods在Kubernetes中怎么进行failover 在Kubernetes的work node上有kubelet,会负责监控该work node上的pods,如果有contai ...

  8. npm是什么,用来干嘛的

    网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话题. 本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 ...

  9. windows 启动停止 java进程

    本案例以 xxx.jar    为列子 我们一般启动的jar 在任务管理器中查看进程都是javaw.exe ,无法用命令来 kill,所以我们得给自己的java 进程设置个新 title 1:  首先 ...

  10. spark-sql分组去重总数统计uv

    SparkConf sparkConf = new SparkConf(); sparkConf .setAppName("Internal_Func") .setMaster(& ...