HTTP POST请求远程访问接口详细文档

第一步,创建httpPost方法

public static String httpPost(String urlStr,String params){
    URL connect;
    StringBuffer data = new StringBuffer();
    try {
        connect = new URL(urlStr);
        HttpURLConnection connection = (HttpURLConnection)connect.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setUseCaches(false);//post不能使用缓存
        connection.setInstanceFollowRedirects(true);
        connection.setRequestProperty("accept", "*/*");
        connection.setRequestProperty("connection", "Keep-Alive");
        connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
        OutputStreamWriter paramout = new OutputStreamWriter(
                connection.getOutputStream(),"UTF-8");
        /*String paramsStr = "";   //拼接Post 请求的参数
        //System.out.println("拼接字符串为字符串params:"+params);
        for(String param : params.keySet()){
            paramsStr += "&" + param + "=" + params.get(param);
        }
        if(!paramsStr.isEmpty()){
            paramsStr = paramsStr.substring(1);
        }*/
        System.out.println("拼接字符串为字符串paramsStr:"+params);
        paramout.write(params);
        paramout.flush();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream(), "UTF-8"));
        String line;
        while ((line = reader.readLine()) != null) {
            data.append(line);
        }

        paramout.close();
        reader.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return data.toString();
}
注意事项中间参数方式可以按照场景切换。

第二步:生成sign签名

1、有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 

2、在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值.

注意事项

1、参数名ASCII码从小到大排序(字典序);

2、如果参数的值为空不参与签名;

3、参数名区分大小写;

4、key为固定字符值udhjskenc。

public static String createSign(String characterEncoding, SortedMap<Object,Object> parameters, String key){
    StringBuffer sb = new StringBuffer();
    StringBuffer sbkey = new StringBuffer();
    Set es = parameters.entrySet();  //所有参与传参的参数按照accsii排序(升序)
    Iterator it = es.iterator();
    while(it.hasNext()) {
        Map.Entry entry = (Map.Entry)it.next();
        String k = (String)entry.getKey();
        Object v = entry.getValue();
        //空值不传递,不参与签名组串
        if(null != v && !"".equals(v)) {
            sb.append(k + "=" + v + "&");
            sbkey.append(k + "=" + v + "&");
        }
    }
    //System.out.println("字符串:"+sb.toString());
    sbkey=sbkey.append("appSecret="+key);

    //MD5加密,结果转换为大写字符
    String sign = MD5Util.MD5Encode(sbkey.toString(), characterEncoding).toUpperCase();
    System.out.println("MD5加密值sign:"+sign);
    System.out.println("拼接字符串为字符串:"+sb.toString()+"sign="+sign);
    return sb.toString()+"sign="+sign;
}

第三步:调试接口

public static void main(String[] args) throws Exception {
    //按照ASCII码从小到大排序获取sign
    SortedMap<Object,Object> map=new TreeMap<Object,Object>();
    String appid ="OYTBSJJtPpGyYl7EDFS3";
    String dt =String.valueOf(System.currentTimeMillis());
    String iccid ="124587656541232312";
    String secret ="DV7cd54dDSEWD54fserdswe";
    String appSecret ="udhjskenc";
    map.put("iccid", iccid);
    map.put("appid", appid);
    map.put("dt", dt);
    map.put("secret", secret);
    String sign = createSign("UTF-8",map,appSecret);
    System.out.println("最后结果:"+sign);
    String url="你自己应该访问的链接!";
    System.out.println(httpPost(url2,sign));
}

注意事项

        我这里调用httpPost直接传输的拼接好的参数sign,需要根据自己的场景进行修改!


版权声明:本文为cuiqwei原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。