http请求方式-RestTemplate
http请求方式-RestTemplate
import com.alibaba.fastjson.JSON;
import com.example.core.mydemo.http.OrderReqVO;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate; public class RestTemplateTest { public static void main(String[] args) {
//requestVO请求参数
org.springframework.http.HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json;charset=UTF-8");
// requestHeaders.add("User-Agent", "mysite_web");
requestHeaders.add("connection", "Keep-Alive");
// requestHeaders.add("Accept", "application/json;version=3.0;compress=false"); OrderReqVO data = new OrderReqVO();
data.setOrderNum("111123333");
data.setServerType("1"); RestTemplate template = new RestTemplate();
//设置参数
HttpEntity<String> requestEntity = new HttpEntity<>(JSON.toJSONString(data), requestHeaders); String url = "https://域名/接口名称"; ResponseEntity<String> response = template.exchange(url,
HttpMethod.POST, requestEntity, String.class); System.out.println("code httpResult=" + response.getStatusCode());
System.out.println("code httpResult=" + response.getBody()); } } ##方式2
try {
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf)
.build(); HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory); Map<String, Object> map = JSONObject.parseObject(JSON.toJSONString(data));
StringBuilder sb = new StringBuilder();
for (String s : map.keySet()) {
sb.append(s).append("=").append(map.get(s)).append("&");
}
String str = sb.substring(0, sb.length() - 1).toString();
HttpHeaders httpHeaders = new HttpHeaders(); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + "?" + str, new HttpEntity<>(str, httpHeaders), String.class);
System.out.println("远程调用返回:"+ responseEntity.getStatusCode());
System.out.println("远程调用返回:"+ responseEntity.getBody()); }catch (Exception e) {
e.printStackTrace();
} ##方式3
public static <T> T doPostRenYun(String url, Object param, Class<T> responseClass) {
Map<String, Object> map = JSONObject.parseObject(JSON.toJSONString(param));
StringBuilder sb = new StringBuilder();
for (String s : map.keySet()) {
sb.append(s).append("=").append(map.get(s)).append("&");
}
String str = sb.substring(0, sb.length() - 1).toString();
logger.info("doPostRenYun,url:{},param:{}", url, str);
HttpHeaders httpHeaders = new HttpHeaders();
try {
ResponseEntity<String> responseEntity = RestTemplateConfig.getRestTemplate().postForEntity(url + "?" + str, new HttpEntity<>(str, httpHeaders), String.class);
T t = JSON.parseObject(responseEntity.getBody(), responseClass);
logger.info("doPostRenYun,url:{},result:{}", url, JSON.toJSONString(t));
return t;
} catch (Exception e) {
logger.error("doPostRenYun,url:{},error:", url, e); return null;
}
} import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate; import java.util.concurrent.TimeUnit; /**
* @Description: restTemplate 配置
*/
public class RestTemplateConfig {
private static RestTemplate restTemplate; static {
// 长链接保持时间长度20秒
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager =
new PoolingHttpClientConnectionManager(20, TimeUnit.SECONDS);
// 设置最大链接数
poolingHttpClientConnectionManager.setMaxTotal(2*getMaxCpuCore() + 3 );
// 单路由的并发数
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(2*getMaxCpuCore()); HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager); // 重试次数3次,并开启
httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3,true));
HttpClient httpClient = httpClientBuilder.build();
// 保持长链接配置,keep-alive
httpClientBuilder.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy()); HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); // 链接超时配置 10秒
httpComponentsClientHttpRequestFactory.setConnectTimeout(10000);
// 连接读取超时配置
//httpComponentsClientHttpRequestFactory.setReadTimeout(10000);
// 连接池不够用时候等待时间长度设置,分词那边 500毫秒 ,我们这边设置成1秒
httpComponentsClientHttpRequestFactory.setConnectionRequestTimeout(3000); // 缓冲请求数据,POST大量数据,可以设定为true 我们这边机器比较内存较大
//httpComponentsClientHttpRequestFactory.setBufferRequestBody(true); restTemplate = new RestTemplate();
restTemplate.setRequestFactory(httpComponentsClientHttpRequestFactory);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
} public static RestTemplate getRestTemplate(){
return restTemplate;
} private static int getMaxCpuCore(){
int cpuCore = Runtime.getRuntime().availableProcessors();
return cpuCore;
}
}
http请求方式-RestTemplate的更多相关文章
- Spring RestTemplate中几种常见的请求方式
https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...
- Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求
Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明 ...
- Spring Boot之发送HTTP请求(RestTemplate详解)
原文作者:微笑面对生活 https://www.javazhiyin.com/19714.html#comment-345 RestTemplate是Spring提供的用于访问Rest服务的客户端,R ...
- 限制action所接受的请求方式或请求参数
原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...
- Android——JDK的get请求方式
layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- 第二节(RequestMapping请求方式)学习尚硅谷-springmvc视频教程
项目中,创建测试类SpringMVCTest @Controller @RequestMapping("/springmvc1") public class SpringMVCTe ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- js中同步与异步请求方式
异步请求方式: $.ajax({ url : 'your url', data:{name:value}, cache : false, async : true, type : "POST ...
- WEB API 中HTTP的get、post、put,delete 请求方式
一.WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: 1.POST 用于新建资源,服务端在指定的URI 上创 ...
- Ajax中的get和post两种请求方式的异同
Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别. 1. get是把参数数据队列加到提交表单的A ...
随机推荐
- [FAQ] VScode 用户代码片段设置
以PHP为示例,配置如下: { "dpe": { "prefix": "dpe", "body": [ " ...
- [FAQ] Solidity 合约销毁 ?
仅创建者可以销毁合约的示例: address public owner; // When deploy contract constructor() public { owner = msg.send ...
- 使用 Docker 搭建 gitea 私有仓库
一.准备材料 安装环境:linux 工具:docker 软件:MySql.gitea 二.安装Docker 安装Docker:https://www.cnblogs.com/jzcn/p/156937 ...
- ansible(13)--ansible的lineinfile模块
1. lineinfile模块 功能:修改或删除文件内容,与系统中的 sed 命令类似: 主要参数如下: 参数 说明 path 指定要操作的文件 regexp 使用正则表达式匹配对应的行 line 修 ...
- 海康iSC综合安防平台-视频web插件调试
综合安防管理平台 视频WEB插件 1.demo_window_simple_playback.html.demo_window_simple_preview.html为简化版demo,可在此基础上开发 ...
- Splashtop 扩展了所有 Android 8.0 以上设备的远程控制功能
好消息:Splashtop远程访问和远程支持软件现在支持100多个品牌的 Android 设备. 2020年9月15日,远程访问和远程支持解决方案的全球领导者 Splashtop Inc. 宣布:所有 ...
- pageoffice 6 实现word文件添加水印
在很多场景下,Word文档正式发文之前,或者说形成最终文档之前,常常需要往Word文件中添加水印,并且会根据文件类型或内容的不同,需要添加的水印也不一样. 添加水印是Word软件里的一个简单功能,直接 ...
- Mono 支持LoongArch架构
近期,著名的.NET开源社区Mono正式支持LoongArch(龙架构),目前LoongArch64架构已出现在.NET社区主干分支上. 详细内容可以跟踪 https://github.com/mon ...
- 微信小程序 canvas 手写签名(2d)
canvas 2d 目前支持预览,不支持真机调试 index.wxml <canvas type="2d" id="canvas" bindtouchmo ...
- 我开源的H5商城2.0版本发布,强烈推荐
简介 waynboot-mall 是一套全部开源的 H5 商城项目,包含运营后台.H5 商城前台和后端接口三个项目 .实现了一套完整的商城业务,有首页展示.商品分类.商品详情.sku 详情.商品搜索. ...