httpclient4.5.2 Post请求支持http和https
先导入所需的jar包,pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
写一个工具类 HttpUtil
package cn.nintendoswitch.user.api.boot.common.util; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClients; public class HttpUtil { public static String doPost(String url, Header[] headers, Map<String, Object> paramMaps) {
String result = null;
HttpPost httpPost = new HttpPost(url);
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
try {
httpPost.setHeaders(headers);
List<NameValuePair> pairList = new ArrayList<>();
for (Map.Entry<String, Object> entry : paramMaps.entrySet()) {
String key = entry.getKey();
String value = (String) entry.getValue();
pairList.add(new BasicNameValuePair(key, value));
}
UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(pairList, "UTF-8");
httpPost.setEntity(urlEntity);
HttpResponse resp = closeableHttpClient.execute(httpPost);
if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = EntityUtils.toString(resp.getEntity(), "UTF-8").trim();
}
} catch (Exception e) {
throw new RuntimeException("HTTP post failed.", e);
} finally {
httpPost.abort();
try {
closeableHttpClient.close();
} catch (Exception e2) {
throw new RuntimeException("Close CloseableHttpClient failed.", e2);
}
} return result;
} // 使用代理服务器IP 请求出去
public static String doHttpsPost(String url, Header[] headers, Map<String, Object> paramMaps) {
// 设置代理
HttpHost proxy = new HttpHost(代理IP, 端口号, "http");
RequestConfig defaultRequestConfig = RequestConfig.custom().setProxy(proxy).build(); String result = null;
CloseableHttpClient httpClient = null;
HttpPost httpPost = new HttpPost(url);
try {
httpPost.setHeaders(headers);
httpPost.setEntity(httpEntity);
httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
HttpResponse resp = httpClient.execute(httpPost);
result = EntityUtils.toString(resp.getEntity(), "UTF-8").trim();
} catch (Exception e) {
throw new RuntimeException("HTTP Post failed.", e);
} finally {
httpPost.abort();
try {
httpClient.close();
} catch (IOException e) {
throw new RuntimeException("Close CoseabledHttpClient failed.", e);
}
}
return result;
} }
写个测试调用方法:
package cn.nintendoswitch.user.api.boot.controller; import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.nintendoswitch.user.api.boot.common.util.HttpUtil;
import io.jsonwebtoken.impl.Base64Codec; @Controller
public class IndexController { @RequestMapping("/indexPage")
public void indexPage(HttpServletRequest request, HttpServletResponse response) {
System.out.println("welcome to shanghai.");
} @RequestMapping("/testPostWaveToken")
public void testPostWaveToken(HttpServletRequest request, HttpServletResponse response) {
String url = "https://xxxxxx.com.cn/aaa/bbb/"; String base64Content = "12121212121:aaaaaaaaaaaaa";
String encodeContent = Base64Codec.BASE64.encode(base64Content);
Header[] headers = {new BasicHeader("token", "ABCDEF " + encodeContent),
new BasicHeader("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE)};
Map<String, Object> paramMaps = new HashMap<>();
paramMaps.put("param01", "value01");
String resutlMsg = HttpUtil.doPost(url, headers, paramMaps);
System.out.println("return info is : " + resutlMsg);
}
}
好了,备忘一下,需要的朋友可以转载,但请注明原著来源,谢谢。
httpclient4.5.2 Post请求支持http和https的更多相关文章
- HttpClient4.X发送Get请求的url参数拼接
HttpClient4.X发送Get请求的参数拼接 使用httpClient发送get请求时,请求参数可以以?key=val&key1=val1的拼接到url后面. 但是请求参数较多时,这种方 ...
- Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...
- nginx将http升级到https并且同时支持http和https两种请求、http自动转向https
1.http升级到https 1.1.检查 Nginx 是否支持 SSL /usr/local/nginx/sbin/nginx -V configure arguments中是否有--with-ht ...
- 【Nginx】将http升级到https并且同时支持http和https两种请求
一.如何将http升级到https 需要满足下面三个: 1.域名 2.nginx 3.SSL证书 一般第三方证书颁发机构下发的证书是收费的,一年好几千. 1) 从腾讯云申请免费的SSL证 ...
- HttpUtil工具类,发送Get/Post请求,支持Http和Https协议
HttpUtil工具类,发送Get/Post请求,支持Http和Https协议 使用用Httpclient封装的HttpUtil工具类,发送Get/Post请求 1. maven引入httpclien ...
- 测试平台系列(92) 让http请求支持文件上传
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...
- HTTP请求响应过程 与HTTPS区别
原文:HTTP请求响应过程 与HTTPS区别 HTTP协议学习笔记,基础,干货 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏 ...
- Https系列之三:让服务器同时支持http、https,基于spring boot
Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...
- 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
随机推荐
- 《精通CSS第3版》(6)内容布局(定位+水平布局)
- Cache管理机制(System.Web.Caching)
一,System .Web.Caching与缓存工作机制简介 System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包 ...
- [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- .net core在Linux本地化Localization的一次填坑
使用ABP框架开发.net core程序已经有一段时间了,因为之前部署在windows服务器上,使用一直很正常.自从前段时间切换服务器上了Linux的Centos服务器,发现之前中文的语言变成了英文, ...
- Windows10不能进入睡眠
问题 有时候暂时不使用计算机(Windows10笔记本),既想省电,又想回来之后快速启动,一般会选择让计算机进入睡眠状态.睡眠状态下,基本上只有内存通电,保存着之前的工作状态,可以快速恢复. 但是最近 ...
- Django文档阅读之聚合
聚合 我们将引用以下模型.这些模型用来记录多个网上书店的库存. from django.db import models class Author(models.Model): name = mode ...
- 在ensp上VLAN基础配置以及Access接口
什么是VLAN? 早期的局域网技术是基于总线型的结构,也就是说所有主机共享一条传输线路.这就带来了很多问题:冲突域和安全问题.为了避免冲突域,我们使用二层交换机.但想想,一台计算机在总线上传输数据的时 ...
- PMBOK(第六版) PMP备考知识总汇!
记录本人学习PMBOK第六版的学习笔记. 备考知识总汇! PMBOK序章 PMP备考指南之相关事项介绍 PMP备考指南之第一章:引论 PMP备考指南之第二章:项目运作环境 PMP备考指南之第三章:项目 ...
- leetcode整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321 示例 3: 输入: 120输出: 21 ...
- kali_Airmon-ng第一次渗透测试
再看了一些资料之后,决定自己整理一下进行第一次测试,测试目标,自己宿舍的WIFI.教程仅供学习参考 断开kali连接的wifi,并检查网卡状态 airmon-ng 开启无线网卡的监控模式 airmon ...