post请求本来是一种很常见的web请求方式,相信许多项目都有一系列的封装工具类。

今天遇着一个特殊的需求。

需要在post的请求url内封装相应的token 与及key相关的值,这就奇怪了,url封装相应的参数值不是get的做法么,post可以支持么 ,试试,例如Postman等常用的restful接口测试工具都能够调用成功,但是原来封装的普通的http的post方法,便不再能够正常支持参数的 封装,要么校验报错,或者说是直接提示url不符合规范。

常用的请求方式是httpClient 与HttpURLConnection:

首先列出我们需要封装入url的请求token:

如果只是简单拼接进url是行不通的,因为我们都知道URLEncoder,对url字符集编码设置,所以需要对所有的值进行字符集编码设置,最终我们封装成了如下post方法支持url拼接入相应的请求参数:

POST_URL:请求url
urlParam:如上需要封装进url的参数
body:普通需要传递的参数
 
    public static String httpURLConnectionPOST (String POST_URL,Map<String, String> urlParam,String body) {

        CloseableHttpResponse response = null;
try {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout()
.setConnectTimeout()
.setConnectionRequestTimeout()
.build();
        //httpclient
CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
// HttpPost httpPost = new HttpPost(POST_URL);
StringBuilder param=new StringBuilder("");
//将要拼接的参数urlencode
for (String key:urlParam.keySet()){
param.append(key + "=" + URLEncoder.encode(urlParam.get(key), "UTF-8") + "&");
}
//pingjie
HttpPost httpPost = new HttpPost(POST_URL+param.toString());
//请求参数设置
if(com.sf.ccsp.common.util.StringUtils.isNotEmpty(body)){
StringEntity entity=new StringEntity(body, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
}
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, "UTF-8");
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage(), e);
} catch (ClientProtocolException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
} catch (Exception e){
System.out.println(e);
}finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
} } return null; }

这样就可以正常调用了。

那么问题来了,对方为什么要这样做呢?

想了一下,1.处于安全性验证它的access_token是一个时效性非常高的校验,防止可重入攻击

      2.url中的参数值方便多次获取校验

最新文章

  1. 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】
  2. css 多个不定数量提交按钮居中显示,纯css解决
  3. 【leetcode】Edit Distance (hard)
  4. Fragment 操作原理
  5. IOS开发之—— 客服QQ(调用qq网页聊天),客服热线(拨打电话)
  6. Gson心得小笔记
  7. python 函数的参数对应
  8. VS2012 win7 修改TFS登陆账号
  9. C++中,申请字符串数组可用new实现
  10. iOS GCD 与 NSOperationQueue
  11. win7(64bit)python相关环境模块搭建
  12. rapidxml对unicode的支持
  13. python3.5读取网页代码,并保存
  14. C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化
  15. HDU 1509 Windows Message Queue(队列)
  16. (基础篇 走进javaNIO)第二章-NIO入门
  17. beef配合ettercap批量劫持内网的浏览器
  18. golang channel的使用以及调度原理
  19. rimraf node_modules 快速删除
  20. HttpRunner框架(一)

热门文章

  1. pl/sql 实例精解 07
  2. js 控制按钮点击后不可用
  3. Gradle学习系列之一——Gradle快速入门(转)
  4. List、Map、Set三个接口存储元素时各有什么特点?
  5. .NET开发相关使用工具和框架
  6. 解决finalflares 安装成功后无法显示问题
  7. JavaWeb中文乱码问题解决思路
  8. 71、Android上对Cookie的读写操作
  9. C++获取某个文件夹下的所有文件
  10. 编写高质量代码--改善python程序的建议(三)