当前位置:   article > 正文

http签名验证+MD5加密+模拟post请求_http md5

http md5

1.1 http接口签名验证

1) 将表数据MD5签名

格式要求:json内嵌套json对象,需要组成字符串,json内嵌数组,不需要排序,直接参数=值1&值2...&值n,如key=1&id=2&secret=88eereff8

注意:

①使用replace(“”,””)函数来截取到对应格式。

②根据表数据封装成json的时候,要按表格里面字段顺序来依次封装到json对象中,作用:方便别人理解。

③为了使json数据按照ASCLL码顺序排序,建议使用fastjson,它会帮助我们自动排序,其依赖:

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.1.23</version>
  5. </dependency>

如果使用net.sf.json,其依赖要添加<classifier>jdk15</classifier>JSON.parseObject,是将Json字符串转化为相应的对象;JSON.toJSONString则是将对象转化为Json字符串。完整依赖如下:

  1. <dependency>
  2. <groupId>net.sf.json-lib</groupId>
  3. <artifactId>json-lib</artifactId>
  4. <version>2.4</version>
  5. <classifier>jdk15</classifier>
  6. </dependency>

 

1.2 MD5加密16位或者32位代码如下:

  1. /**
  2. * 对字符串md5加密(小写+字母)
  3. * @param str 传入要加密的字符串
  4. * @return MD5加密后的字符串
  5. */
  6. public static String getMD5(String str) {
  7. String result = "";
  8. try {
  9. MessageDigest md = MessageDigest.getInstance("MD5");
  10. md.update(str.getBytes());
  11. byte b[] = md.digest();
  12. int i;
  13. StringBuffer buf = new StringBuffer("");
  14. for (int offset = 0; offset < b.length; offset++) {
  15. i = b[offset];
  16. if (i < 0)
  17. i += 256;
  18. if (i < 16)
  19. buf.append("0");
  20. buf.append(Integer.toHexString(i));
  21. }
  22. // 32 位:result = buf.toString();
  23. // 16 位
  24. result = buf.toString().substring(8, 24);
  25. } catch (NoSuchAlgorithmException e) {
  26. System.out.println(e);
  27. }
  28. return result;
  29. }

 

 

1.3 使用http模拟post请求,传递json数据

  post请求的时候要把参数放在body里,如果把参数放在url后面拼接(<head/>里)相当于加了一个params,而放在body里面由key value对应传递参数

  1. /**
  2. * post请求
  3. * @param url
  4. * @param json
  5. * @return JSONObject
  6. */
  7. public static net.sf.json.JSONObject doPost(String url,JSONObject json){
  8. // 使用帮助类HttpClients创建CloseableHttpClient对象.
  9. CloseableHttpClient httpclient = HttpClients.createDefault();
  10. // HTTP请求类型创建HttpPost实例
  11. HttpPost post = new HttpPost(url);
  12. net.sf.json.JSONObject response = null;
  13. try {
  14. // 把json内容放到body里面
  15. StringEntity s = new StringEntity(json.toString());
  16. s.setContentEncoding("UTF-8");
  17. s.setContentType("application/json");
  18. // 对于POST请求,把请求体填充进HttpPost实体.
  19. post.setEntity(s);
  20. // 通过执行HttpPost请求获取CloseableHttpResponse实例 ,从CloseableHttpResponse实例中获取状态码,错误信息,以及响应页面等等.
  21. HttpResponse res = httpclient.execute(post);
  22. // int SC_OK = 200;
  23. if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
  24. // 通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理
  25. HttpEntity entity = res.getEntity();
  26. // 返回json格式:
  27. String result = EntityUtils.toString(res.getEntity());
  28. response = net.sf.json.JSONObject.fromObject(result);
  29. }
  30. } catch (Exception e) {
  31. throw new RuntimeException(e);
  32. }
  33. return response;
  34. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/732614
推荐阅读
相关标签
  

闽ICP备14008679号