package com.matrix.biz.action; 
 | 
import java.io.BufferedReader; 
 | 
import java.io.IOException; 
 | 
import java.io.InputStreamReader; 
 | 
import java.net.HttpURLConnection; 
 | 
import java.net.URL; 
 | 
import java.net.URLEncoder; 
 | 
import java.security.MessageDigest; 
 | 
import java.security.NoSuchAlgorithmException; 
 | 
import java.util.HashMap; 
 | 
import java.util.Map; 
 | 
  
 | 
  
 | 
/** 
 | 
 * 实时查询请求Demo 
 | 
 * @author Administrator 
 | 
 * 
 | 
 */ 
 | 
public class SynQueryDemo { 
 | 
     
 | 
    public static void main(String[] args) { 
 | 
        String key = "RFGYfbVI747";                //贵司的授权key 
 | 
        String customer = "244D09E91F5500D0AB888299959835A2";            //贵司的查询公司编号 
 | 
        String com = "shunfeng";            //快递公司编码 
 | 
        String num = "232581179302";    //快递单号 
 | 
        String phone = "";                //手机号码后四位 
 | 
        String from = "";                //出发地 
 | 
        String to = "";                    //目的地 
 | 
        int resultv2 = 0;                //开启行政规划解析 
 | 
         
 | 
        SynQueryDemo demo = new SynQueryDemo(key, customer); 
 | 
        String result = demo.synQueryData(com, num, phone, from, to, resultv2); 
 | 
        System.out.println(result); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 实时查询请求地址 
 | 
     */ 
 | 
    private static final String SYNQUERY_URL = "http://poll.kuaidi100.com/poll/query.do"; 
 | 
     
 | 
    private String key;            //授权key 
 | 
    private String customer;    //实时查询公司编号 
 | 
  
 | 
    public SynQueryDemo(String key, String customer) { 
 | 
        this.key = key; 
 | 
        this.customer = customer; 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 实时查询快递单号 
 | 
     * @param com            快递公司编码 
 | 
     * @param num            快递单号 
 | 
     * @param phone            手机号 
 | 
     * @param from            出发地城市 
 | 
     * @param to            目的地城市 
 | 
     * @param resultv2        开通区域解析功能:0-关闭;1-开通 
 | 
     * @return 
 | 
     */ 
 | 
    public String synQueryData(String com, String num, String phone, String from, String to, int resultv2) { 
 | 
  
 | 
        StringBuilder param = new StringBuilder("{"); 
 | 
        param.append("\"com\":\"").append(com).append("\""); 
 | 
        param.append(",\"num\":\"").append(num).append("\""); 
 | 
        param.append(",\"phone\":\"").append(phone).append("\""); 
 | 
        param.append(",\"from\":\"").append(from).append("\""); 
 | 
        param.append(",\"to\":\"").append(to).append("\""); 
 | 
        if(1 == resultv2) { 
 | 
            param.append(",\"resultv2\":1"); 
 | 
        } else { 
 | 
            param.append(",\"resultv2\":0"); 
 | 
        } 
 | 
        param.append("}"); 
 | 
         
 | 
        Map<String, String> params = new HashMap<String, String>(); 
 | 
        params.put("customer", this.customer); 
 | 
        String sign = MD5Utils.encode(param + this.key + this.customer); 
 | 
        params.put("sign", sign); 
 | 
        params.put("param", param.toString()); 
 | 
         
 | 
        return this.post(params); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 发送post请求 
 | 
     */ 
 | 
    public String post(Map<String, String> params) { 
 | 
        StringBuffer response = new StringBuffer(""); 
 | 
         
 | 
        BufferedReader reader = null; 
 | 
        try { 
 | 
            StringBuilder builder = new StringBuilder(); 
 | 
            for (Map.Entry<String, String> param : params.entrySet()) { 
 | 
                if (builder.length() > 0) { 
 | 
                    builder.append('&'); 
 | 
                } 
 | 
                builder.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
 | 
                builder.append('='); 
 | 
                builder.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); 
 | 
            } 
 | 
            byte[] bytes = builder.toString().getBytes("UTF-8"); 
 | 
  
 | 
            URL url = new URL(SYNQUERY_URL); 
 | 
            HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
 | 
            conn.setConnectTimeout(3000); 
 | 
            conn.setReadTimeout(3000); 
 | 
            conn.setRequestMethod("POST"); 
 | 
            conn.setRequestProperty("accept", "*/*"); 
 | 
            conn.setRequestProperty("connection", "Keep-Alive"); 
 | 
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
 | 
            conn.setRequestProperty("Content-Length", String.valueOf(bytes.length)); 
 | 
            conn.setDoOutput(true); 
 | 
            conn.getOutputStream().write(bytes); 
 | 
  
 | 
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
 | 
             
 | 
            String line = ""; 
 | 
            while ((line = reader.readLine()) != null) { 
 | 
                response.append(line); 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } finally { 
 | 
            try { 
 | 
                if (null != reader) { 
 | 
                    reader.close(); 
 | 
                } 
 | 
            } catch (IOException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
         
 | 
        return response.toString(); 
 | 
    } 
 | 
} 
 | 
  
 | 
/** 
 | 
 * md5加密 
 | 
 */ 
 | 
class MD5Utils { 
 | 
    private static MessageDigest mdigest = null; 
 | 
    private static char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 
 | 
     
 | 
    private static MessageDigest getMdInst() { 
 | 
        if (null == mdigest) { 
 | 
            try { 
 | 
                mdigest = MessageDigest.getInstance("MD5"); 
 | 
            } catch (NoSuchAlgorithmException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
        return mdigest; 
 | 
    } 
 | 
  
 | 
    public static String encode(String s) { 
 | 
        if(null == s) { 
 | 
            return ""; 
 | 
        } 
 | 
         
 | 
        try { 
 | 
            byte[] bytes = s.getBytes(); 
 | 
            getMdInst().update(bytes); 
 | 
            byte[] md = getMdInst().digest(); 
 | 
            int j = md.length; 
 | 
            char str[] = new char[j * 2]; 
 | 
            int k = 0; 
 | 
            for (int i = 0; i < j; i++) { 
 | 
                byte byte0 = md[i]; 
 | 
                str[k++] = digits[byte0 >>> 4 & 0xf]; 
 | 
                str[k++] = digits[byte0 & 0xf]; 
 | 
            } 
 | 
            return new String(str); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
} 
 |