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

1.1 http接口签名验证

1) 将表数据MD5签名

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

注意:

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

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

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

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.23</version>
 </dependency>

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

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

 

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

/**
 * 对字符串md5加密(小写+字母)
 * @param str 传入要加密的字符串
 * @return  MD5加密后的字符串
 */
public static String getMD5(String str) {
    String result = "";
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes());
        byte b[] = md.digest();
        int i;
        StringBuffer buf = new StringBuffer("");
        for (int offset = 0; offset < b.length; offset++) {
            i = b[offset];
            if (i < 0)
                i += 256;
            if (i < 16)
                buf.append("0");
            buf.append(Integer.toHexString(i));
        }
        // 32 位:result = buf.toString();
        // 16 位
        result = buf.toString().substring(8, 24);
    } catch (NoSuchAlgorithmException e) {
        System.out.println(e);
    }
    return result;

}

 

 

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

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

/**
  * post请求
  * @param url
  * @param json
  * @return JSONObject
  */
public static net.sf.json.JSONObject doPost(String url,JSONObject json){
    // 使用帮助类HttpClients创建CloseableHttpClient对象.
     CloseableHttpClient httpclient = HttpClients.createDefault();
    // HTTP请求类型创建HttpPost实例
     HttpPost post = new HttpPost(url);
     net.sf.json.JSONObject response = null;
     try {
         // 把json内容放到body里面
        StringEntity s = new StringEntity(json.toString());
        s.setContentEncoding("UTF-8");
        s.setContentType("application/json");

         // 对于POST请求,把请求体填充进HttpPost实体.
        post.setEntity(s);
         // 通过执行HttpPost请求获取CloseableHttpResponse实例 ,从CloseableHttpResponse实例中获取状态码,错误信息,以及响应页面等等.
        HttpResponse res = httpclient.execute(post);
        // int SC_OK = 200;
        if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
            // 通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理
            HttpEntity entity = res.getEntity();
            // 返回json格式:
            String result = EntityUtils.toString(res.getEntity());
            response = net.sf.json.JSONObject.fromObject(result);
        }
     } catch (Exception e) {
        throw new RuntimeException(e);
     }
     return response;
}

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值