手记

JavaWeb中实现快递信息查询

网上的物流查询接口有很多,但是大部分都比较麻烦。所以这里介绍一个比较简单的查询方法,不需要注册,只需要快递单号物流公司就可以的查看物流信息了。

接口链接

如果是在Python中可以直接调用request来发起请求,但是在java中,还是第一次调用请求,所以查了一些资料。

实例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @Name: HttpRequest.java
 * @Description: Java后台访问http,并获得响应数据
 */
public final class RequestTest {

    // ;charset=utf-8 必须要,不然会出现乱码
    public static String CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded;charset=utf-8";

    public static String CONTENT_TYPE_FORM_DATA = "multipart/form-data;charset=utf-8";

    /** text/plain;charset=utf-8 */
    public static String CONTENT_TYPE_PLAIN = "text/plain;charset=utf-8";
    /** application/json;charset=utf-8 */
    public static String CONTENT_TYPE_JSON = "application/json;charset=utf-8";

   
    /**
     * @Name: get
     * @Description: 发送get请求,并返回响应数据。
     * @Parameters: URL,要访问的url。
     * @Return: String,响应数据。
     */
    public static String get(String URL) {

        HttpURLConnection conn = null;
        BufferedReader dataIn = null;
        String msg = null;
        try {
            // 把字符串转换为URL请求地址
            URL url = new URL(URL);
            // 打开连接
            conn = (HttpURLConnection) url.openConnection();
            // 连接会话
            conn.connect();
            // 获取输入流
            dataIn = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            StringBuilder sb = new StringBuilder();
            while ((line = dataIn.readLine()) != null) {// 循环读取流
                sb.append(line);
            }
            return sb.toString();

        } catch (Exception e) {
        	msg = "{\\"message\\": \\"网络异常!\\",\\"ischeck\\": \\"0\\"}";
        } finally {
            try {
                // 重要且易忽略步骤 (关闭流,切记!)
                if (dataIn != null) {
                    dataIn.close();
                }
                // 销毁连接
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return msg;
    }


    public static void main(String[] args) {
        String result = get("http://www.kuaidi100.com/query?type=debangwuliu&postid=9986459371");
        System.out.println(result);
    }
}

结果回调

请求之后返回的结果:

{
    "message": "ok", 
    "nu": "9986459371", 
    "ischeck": "1", 
    "condition": "F00", 
    "com": "debangwuliu", 
    "status": "200", 
    "state": "3", 
    "data": [
        {
            "time": "2018-10-29 12:49:17", 
            "ftime": "2018-10-29 12:49:17", 
            "context": "正常签收,签收人类型:本人", 
            "location": null
        }, 
        {
            "time": "2018-10-29 12:41:52", 
            "ftime": "2018-10-29 12:41:52", 
            "context": "派送中,派送人:黄**,电话:***", 
            "location": null
        }
    ]
}

从上面返回来的结果,可以看到,返回的是类似json的字符串,这样就可以将这些结果传到前端进行展示了。

需要注意的是,如果查询的信息是错误的话,返回的结果中的ischeck字段的值是0,并且会有提示信息。
例如下面的结果:

{
    "message": "快递公司参数异常:单号不存在或者已经过期", 
    "nu": "998645937", 
    "ischeck": "0", 
    "condition": "", 
    "com": "debangwuliu", 
    "status": "201", 
    "state": "0", 
    "data": [ ]
}

快递公司对应信息

在拼接链接中,发现有些快递公司的英文不是简单的拼音转过去的。因此,爬取了快递100首页中的所有快递公司的信息,下面就是整理过后的对应信息。

强烈建议在拼接URL之前,先对照一下下面的对应表。

物流公司英文 物流公司
annengwuliu 安能物流​
aae AAE​
aramex Aramex​
baishiwuliu 百世快运
youzhengguonei 包裹/平邮​
bangsongwuliu 邦送物流​
coe COE​
flyway 程光快递​
chuanxiwuliu 传喜物流​
dhl DHL​
debangwuliu 德邦快递
disifang 递四方​
emsguoji EMS国际件​
ewe EWE​
fedex FedEx​
chronopostfren 法国邮政​
youzhengguonei 挂号信​
guotongkuaidi 国通快递​
koreapost 韩国邮政​
postnl 荷兰邮政​
jiajiwuliu 佳吉快运​
jinguangsudikuaijian 京广快递​
jiayiwuliu 佳怡物流​
kuaijiesudi 快捷速递​
kuayue 跨越速运​
hrvatska 克罗地亚邮政​
longbanwuliu 龙邦快运​
lianbangkuaidi 联邦快递​
lianhaowuliu 联昊通​
usps 美国邮政​
minghangkuaidi 民航快递​
mexico 墨西哥邮政​
ganzhongnengda 能达速递​
postennorge 挪威邮政​
southafrican 南非邮政​
ocs OCS​
ontrac OnTrac​
portugalctt 葡萄牙邮政​
swisspost 瑞士邮政​
quanfengkuaidi 全峰快递​
quanyikuaidi 全一快递​
quanchenkuaidi 全晨快递​
rrs 日日顺物流​
rufengda 如风达​
japanposten 日本邮政​
suer 速尔快递​
shenghuiwuliu 盛辉物流​
tnt TNT​
tiandihuayu 天地华宇​
thailand 泰国邮政​
usps USPS​
ups UPS​
wanxiangwuliu 万象物流​
wanjiawuliu 万家物流​
ukrpost 乌克兰邮政​
xinbangwuliu 新邦物流​
xinfengwuliu 信丰物流​
hkpost 中国香港邮政​
youzhengguonei 邮政国内​
youzhengguoji 邮政国际​
youshuwuliu 优速快递​
zhongyouwuliu 中邮物流​
ztky 中铁物流​
zhongtiewuliu 中铁快运​
1人推荐
随时随地看视频
慕课网APP