封装HttpClient进行http请求与https请求
一.https忽略证书
- /**
- * 用于进行Https请求的HttpClient
- *
- * @author joey
- *
- */
- public class SSLClient {
- public static CloseableHttpClient createSSLClientDefault(){
- try {
- SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
- //信任所有
- public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- return true;
- }
- }).build();
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
- return HttpClients.custom().setSSLSocketFactory(sslsf).build();
- } catch (KeyManagementException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (KeyStoreException e) {
- e.printStackTrace();
- }
- return HttpClients.createDefault();
- }
- }
二.post与get请求
- /**
- * 利用HttpClient的工具类
- *
- * @author Joey
- *
- */
- public class HttpClientUtil {
- private static String charSet = "UTF-8";
- private static CloseableHttpClient httpClient = null;
- private static CloseableHttpResponse response = null;
- /**
- * https的post请求
- * @param url
- * @param jsonstr
- * @param charset
- * @return
- */
- public static String doHttpsPost(String url, String jsonStr) {
- try {
- httpClient = SSLClient.createSSLClientDefault();
- HttpPost httpPost = new HttpPost(url);
- httpPost.setHeader("Content-Type", "application/json");
- StringEntity se = new StringEntity(jsonStr);
- se.setContentType("text/json");
- se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
- httpPost.setEntity(se);
- response = httpClient.execute(httpPost);
- if (response != null) {
- HttpEntity resEntity = response.getEntity();
- if (resEntity != null) {
- return EntityUtils.toString(resEntity, charSet);
- }
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }finally {
- if(httpClient != null){
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if(response != null){
- try {
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return null;
- }
- /**
- * http的post请求(用于key-value格式的参数)
- * @param url
- * @param param
- * @return
- */
- public static String doHttpPost(String url,Map<String,String> param){
- try {
- //请求发起客户端
- httpClient = HttpClients.createDefault();
- //参数集合
- List<NameValuePair> postParams = new ArrayList<NameValuePair>();
- //遍历参数并添加到集合
- for(Map.Entry<String, String> entry:param.entrySet()){
- postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
- }
- //通过post方式访问
- HttpPost post = new HttpPost(url);
- HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet);
- post.setEntity(paramEntity);
- response = httpClient.execute(post);
- StatusLine status = response.getStatusLine();
- int state = status.getStatusCode();
- if (state == HttpStatus.SC_OK) {
- HttpEntity valueEntity = response.getEntity();
- String content = EntityUtils.toString(valueEntity);
- //jsonObject = JSONObject.fromObject(content);
- return content;
- }
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- if(httpClient != null){
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if(response != null){
- try {
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return null;
- }
- /**
- * http的post请求(用于请求json格式的参数)
- * @param url
- * @param params
- * @return
- */
- public static String doHttpPost(String url, String jsonStr) {
- try {
- httpClient = HttpClients.createDefault();
- // 创建httpPost
- HttpPost httpPost = new HttpPost(url);
- httpPost.setHeader("Accept", "application/json");
- StringEntity entity = new StringEntity(jsonStr, charSet);
- entity.setContentType("text/json");
- entity.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
- httpPost.setEntity(entity);
- //发送post请求
- response = httpClient.execute(httpPost);
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
- HttpEntity responseEntity = response.getEntity();
- String jsonString = EntityUtils.toString(responseEntity);
- return jsonString;
- }
- }catch(Exception e) {
- e.printStackTrace();
- }finally {
- if(httpClient != null){
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if(response != null){
- try {
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return null;
- }
- /**
- * http的Get请求
- * @param url
- * @param param
- * @return
- */
- public static String doHttpGet(String url,Map<String,String> param) {
- CloseableHttpClient httpclient = null;
- CloseableHttpResponse response = null;
- try {
- httpclient = HttpClients.createDefault();
- if(param != null && !param.isEmpty()) {
- //参数集合
- List<NameValuePair> getParams = new ArrayList<NameValuePair>();
- for(Map.Entry<String, String> entry:param.entrySet()){
- getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
- }
- url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8");
- }
- //发送gey请求
- HttpGet httpGet = new HttpGet(url);
- response = httpclient.execute(httpGet);
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
- return EntityUtils.toString(response.getEntity());
- }
- }catch(Exception e) {
- e.printStackTrace();
- }finally{
- if(httpclient != null){
- try {
- httpclient.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if(response != null){
- try {
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return null;
- }
- }
封装HttpClient进行http请求与https请求的更多相关文章
- httpclient绕过证书验证进行HTTPS请求
http请求是我们常用的一种web应用的应用层协议,但是由于它的不安全性,现在正在逐渐向https协议过渡.https协议是在http的基础上进行了隧道加密,加密方式有SSL和TLS两种.当serve ...
- httpclient 3.1跳过https请求SSL的验证
一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons- ...
- 支持https请求以及https请求的抓包
iOS9推出的时候,苹果希望大家使用https协议,来提高数据传输之间的安全性.下面我就从最简单的代码介绍,如何在工程中设置,来支持https的请求. 一.证书准备篇 1.证书转换 在服务器人员,给你 ...
- Java 使用代理发送Http请求 (将Http请求代理Https请求)
package com.test.porxy; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- HttpClient 之 发送Https请求
HttpClient包是一个优秀的Http请求的开源jar. 本文Http工具类的封装基于HttpClient,封装后的工具类支持Https请求. 但是由于项目的需要快速的实现,以下代码还可能会有点过 ...
- [PHP自动化-进阶]003.CURL处理Https请求访问
引言:继前文<模拟登录并采集数据>,<模拟登录带有验证码的网站>,大家对CURL基本上已经有了认识,这一讲简单的说一下请求Https. 在很多的站点,如TalkingData, ...
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-011-把敏感信息请求转为https(requiresChannel())
1.把包含敏感信息的请求转为https请求,则较为安全,但如何只把有需要安全的请求转为https,而不是不加分辩就把所有请求都转为https呢?可以用requiresChannel() @Overri ...
- AFNetWorking3.0使用 自签名证书的https请求
前几日,项目组出于安全角度的考虑,要求项目中的请求使用https请求,因为是企业内部使用的app,因此使用了自签名的证书,而自签名的证书是不受信任的,所以我们就需要自己来做证书的验证,包括服务器验证客 ...
- Volley框架支持HTTPS请求。
第一次写帖子,嘿嘿. 最近了解到google2013IO大会出了个网络框架,正好项目也需要用到,就看了下. 最后发现接口都是HTTPS的,但是Volley默认是不支持HTTPS,网上找了好久,都没有对 ...
随机推荐
- 面试题(JVM加载机制)
JVM加载class文件的原理机制? JVM中类的装载是classLoader 和它的子类来实现的,Java classLoader是个重要的java运行时的系统组件.它在运行时查找和装入类文件的类. ...
- ios基础-分辨率适配
(一)分辨率定义 分辨率,是指单位长度内包括的像素点的数量,它的单位通常为像素/英寸(ppi).描写叙述分辨率的单位有:(dpi点每英寸).lpi(线每英寸)和ppi(像素每英寸). (二)ios分辨 ...
- ACM-SG函数之Fibonacci again and again——hdu1848
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- Drupal 自己定义主题实体 Theming Custom Entities
在自己定义主题中输出结果时,有三个部分或很多其它特殊的函数.如 hook_menu,Page Callback.MODULE_theme 钩子 1.hook_menu 为了使用自己定义的实体.像创建. ...
- java生成6位随机数的5种方法
转自:https://blog.csdn.net/u012491783/article/details/76862526/
- windows安装gnvm安装教程,node多版本解决方案
本文是实现windows下node多版本管理 Win10专业版 一.安装前准备 安装前请卸载node相关的所有东西!!! 二.gnvm下载 gnvm搜索 http://ksria.com/gnvm/ ...
- WPF向系统发送消息 并传递结构体
场景 :需要开发一个通讯组件 流程为:界面-开启接收服务-通过发送组件发送信息到 其他客户端和服务端 接受服务接收其他客户端发送的消息 需要传递给对应组件或者界面 因此会出现类库重复引用问题.因为采用 ...
- vue中采用axios发送请求及拦截器
这几天在使用vue中axios发送get请求的时候很顺手,但是在发送post请求的时候老是在成功的回调函数里边返回参数不存在,当时就纳闷了,经过查阅资料,终于得到了解决方案,在此做一总结: 首先我们在 ...
- 深入了解React组件重新渲染的条件和生命周期
React组件rerender的真正条件 当前组件的State中的属性改变时且当前组件的shouldcomponentupdate返回true,那么当前组件会rerender 组件的props中的任一 ...
- 「JavaSE 重新出发」05.03.02 在运行时使用反射分析对象
在编写程序时,如果知道想要查看的域名和类型,查看指定的域是一个很容易的事,而利用反射机制可以查看在编译时还不清楚的对象域. java Employee tank = new Employee(&quo ...