http请求格式
https://blog.****.net/u010256388/article/details/68491509
https://kb.cnblogs.com/page/92320/
请求报文内容详解
Header |
解释 |
示例 |
Accept |
指定客户端能够接收的内容类型 |
Accept: text/plain, text/html |
Accept-Charset |
浏览器可以接受的字符编码集。 |
Accept-Charset: iso-8859-5 |
Accept-Encoding |
指定浏览器可以支持的web服务器返回内容压缩编码类型。 |
Accept-Encoding: compress, gzip |
Cookie |
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 |
Cookie: $Version=1; Skin=new; |
onnection |
表示是否需要持久连接。(HTTP 1.1默认进行持久连接) |
Connection: close |
Accept-Language |
浏览器可接受的语言 |
Accept-Language: en,zh |
Referer |
先前网页的地址,当前请求网页紧随其后,即来路 |
|
Host |
指定请求的服务器的域名和端口号 |
Host: www.zcmhi.com |
From |
发出请求的用户的Email |
From: [email protected] |
3.RestTemplate中文乱码问题解决
第一种方法是通过将value的值强转为utf-8格式
/** * 发送http post请求,并将结果返回 * * @param url * @param params * @return */ public JSONObject post(String url, Map<String, Object> params) { if (params == null) { params = Maps.newHashMap(); } String body = params.entrySet().stream() .map(entry -> { try { String value = entry.getValue() instanceof String ? (String) entry.getValue() : JSONObject.toJSONString(entry.getValue()); return entry.getKey() + "=" + URLEncoder.encode(value, "utf-8"); } catch (UnsupportedEncodingException e) { logger.error("encode error", e);//never happen } return ""; } ) .collect(Collectors.joining("&")); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求内容封装 HttpEntity<String> entity = new HttpEntity<>(body, headers); //投递参数 String result = restTemplate.postForObject(url, entity, String.class); logger.info("[url={}][param={}][result={}]", url, JSONObject.toJSONString(params), result); return JSON.parseObject(result); }
第二种方法是通过设置http请求头
HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8"); headers.setContentType(type); System.out.println(type); HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap), headers); String msg = restTemplate.postForObject(url,requestEntity, String.class);
需要注意的是,使用第二个方法,仍然需要将参数params转为String类型。