模拟快递100请求 通过快递单号获取物流信息

需求:只提供快递单号获取物流信息
思路:通过快递100获取
实现:快递100有2个接口,可以模拟请求操作。

1、通过快递单号获取快递公司代码。
2、通过快递公司代码和快递单号获取物流信息。
3、返回的物流信息是JSON格式。将JSON信息转换封装成自己需求的格式。

代码:

public List<Map<String, String>> queryLogisticsInfoByKuadi100(String trackingNo) {
        try {
            if(StringUtils.isBlank(trackingNo)){
                return null;
            }
            // 1.通过快递单号获取是哪个快递公司。
            String typeResult = this.get("http://www.kuaidi100.com/autonumber/autoComNum?text="+trackingNo);
            JSONObject typeJsonObject = (JSONObject)JSON.parse(typeResult);
            JSONArray typeDataArray = (JSONArray) typeJsonObject.get("auto");
            if(typeDataArray.isEmpty()){
                return null;
            }
            JSONObject typeObject = (JSONObject)typeDataArray.get(0);
            String type = typeObject.getString("comCode");
            // 2.通过快递公司及快递单号获取物流信息。
            String kuaidiResult = this.get("http://www.kuaidi100.com/query?type="+type+"&postid="+trackingNo);
            JSONObject jsonObject = (JSONObject)JSON.parse(kuaidiResult);
            String status = jsonObject.getString("status");
            if(!"200".equals(status)){
                return null;
            }
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();
            JSONArray dataArray = (JSONArray) jsonObject.get("data");
            for (int i = 0; i < dataArray.size(); i++) {
                Map<String, String> tempMap = new HashMap<String, String>();
                JSONObject temp = (JSONObject) dataArray.get(i);
                tempMap.put("date", (String) temp.get("time"));
                tempMap.put("logisticsInfo", (String) temp.get("context"));
                list.add(tempMap);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

请求:

private String get(String url) throws ClientProtocolException, IOException{
        DefaultHttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
        HttpGet httpGet = new HttpGet(url);
        HttpUriRequest request = null;
        request = httpGet;
        HttpContext localContext = new BasicHttpContext();
        HttpResponse response = httpClient.execute(request, localContext);
        return EntityUtils.toString(response.getEntity());
    }

测试:

public static void main(String[] args) {
        new LogisticsServiceImpl().queryLogisticsInfoByKuadi100("310788421228");
    }

效果:
模拟快递100请求 通过快递单号获取物流信息_第1张图片

你可能感兴趣的:(java基础,robot)