网上的物流查询接口有很多,但是大部分都比较麻烦。所以这里介绍一个比较简单的查询方法,不需要注册,只需要快递单号和物流公司就可以的查看物流信息了。
接口链接
如果是在Python中可以直接调用request
来发起请求,但是在java中,还是第一次调用请求,所以查了一些资料。
实例
以下部分代码,参考自:工具类 | JAVA发送HTTP请求,并接受返回内容
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 | 中铁快运 |