第一步,创建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版权协议,转载请附上原文出处链接和本声明。