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 params = new HashMap(); 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 params) { StringBuffer response = new StringBuffer(""); BufferedReader reader = null; try { StringBuilder builder = new StringBuilder(); for (Map.Entry 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; } } }