|
|
package com.xkl;
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
import java.io.DataOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStreamReader;
|
|
|
import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by win7 on 2016/12/25.
|
|
|
*/
|
|
|
public class HttpTools {
|
|
|
|
|
|
/**
|
|
|
* 获取当前时间,10位
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getNow(){
|
|
|
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
|
|
|
return String.valueOf(c.getTimeInMillis()/1000);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取签名
|
|
|
*
|
|
|
* 加密算法: sign=md5(str + t + key),32位小写md5
|
|
|
* t: 北京时间距离1970年1月1日的秒数,10位
|
|
|
* key:平台对应的key,此值喜开路管理员授予
|
|
|
* str:业务参数数组,按参数名递增排序排列拼接,例如用户登陆接口,coid+password+username
|
|
|
*
|
|
|
* 需要验证:
|
|
|
* sign:是否正确
|
|
|
* t:是否过期,客户端与服务器时间必须为±300s以内,否则时间验证过期。
|
|
|
* @param params
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getSign(Map<String, String> params){
|
|
|
String sign = "";
|
|
|
String paramStr = "";
|
|
|
List<String> keys = new ArrayList<String>();
|
|
|
for(Map.Entry<String, String> entry : params.entrySet()) {
|
|
|
keys.add(entry.getKey());
|
|
|
}
|
|
|
Collections.sort(keys);
|
|
|
for(String para:keys){
|
|
|
if(!para.equals("sign")&&!para.equals("t")&&!para.equals("type"))
|
|
|
paramStr += params.get(para);
|
|
|
}
|
|
|
sign = EncodeTools.encode("MD5",paramStr + params.get("t") + Constants.KEY);
|
|
|
|
|
|
return sign;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送http请求
|
|
|
* @param url 请求url
|
|
|
* @param type 请求类型:GET,POST,DELETE
|
|
|
* @param params 请求参数:map类型
|
|
|
* @return
|
|
|
*/
|
|
|
public static String requestByMapWithToken(String url, String type, Map<String, String> params, String authorization){
|
|
|
String reqbody = getRequestData(params,"UTF-8").toString();
|
|
|
String result = requestByString(url + "?" + reqbody,type,authorization,null);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static String requestByMap(String url, String type,Map<String, String> params){
|
|
|
return requestByMapWithToken(url,type,params,"");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送http请求
|
|
|
* @param url 请求url
|
|
|
* @param type 请求类型:GET,POST,DELETE
|
|
|
* @param reqbody 请求参数:String类型
|
|
|
* @return
|
|
|
*/
|
|
|
public static String requestByString(String url, String type, String authorization,String reqbody){
|
|
|
HttpURLConnection con = null;
|
|
|
String result = null;
|
|
|
try {
|
|
|
con = getHttpConnection( url , type, authorization);
|
|
|
//you can add any request body here if you want to post
|
|
|
if( reqbody != null){
|
|
|
DataOutputStream out = new DataOutputStream(con.getOutputStream());
|
|
|
out.writeBytes(reqbody);
|
|
|
out.flush();
|
|
|
out.close();
|
|
|
}
|
|
|
con.connect();
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
|
|
String temp = null;
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
while((temp = in.readLine()) != null){
|
|
|
sb.append(temp).append(" ");
|
|
|
}
|
|
|
result = sb.toString();
|
|
|
in.close();
|
|
|
} catch (IOException e) {
|
|
|
System.out.println(e);
|
|
|
}
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
private static HttpURLConnection getHttpConnection(String url, String type, String authorization){
|
|
|
URL uri = null;
|
|
|
HttpURLConnection con = null;
|
|
|
try{
|
|
|
uri = new URL(url);
|
|
|
con = (HttpURLConnection) uri.openConnection();
|
|
|
con.setRequestMethod(type); //type: POST, PUT, DELETE, GET
|
|
|
if(type.equals("POST"))
|
|
|
con.setDoOutput(true);
|
|
|
con.setConnectTimeout(60000); //60 secs
|
|
|
con.setReadTimeout(60000); //60 secs
|
|
|
con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
|
|
|
con.setRequestProperty("authorization",authorization);
|
|
|
}catch(Exception e){
|
|
|
System.out.println( "connection i/o failed" );
|
|
|
}
|
|
|
|
|
|
|
|
|
return con;
|
|
|
}
|
|
|
|
|
|
private static StringBuffer getRequestData(Map<String, String> params, String encode) {
|
|
|
StringBuffer stringBuffer = new StringBuffer(); //存储封装好的请求体信息
|
|
|
try {
|
|
|
for(Map.Entry<String, String> entry : params.entrySet()) {
|
|
|
stringBuffer.append(entry.getKey())
|
|
|
.append("=")
|
|
|
.append(URLEncoder.encode(entry.getValue(), encode))
|
|
|
.append("&");
|
|
|
}
|
|
|
stringBuffer.deleteCharAt(stringBuffer.length() - 1); //删除最后的一个"&"
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return stringBuffer;
|
|
|
}
|
|
|
|
|
|
} |
...
|
...
|
|