curl获取快递网物流信息
来源:互联网 发布:substring mysql 编辑:程序博客网 时间:2024/04/28 00:53
前言
最近在做项目中要使用到快递的物流信息展示,当时是使用的第三方的接口快递鸟,但是昨天发现,现在快递鸟查询天天快递的物流信息是查询不到的。同时客户的商品物流运输就是使用天天快递,这就尴尬了。同时我发现快递网这个网站是可以动态查询物流信息http://m.kuaidi.com/index.html。
请求方式
使用快递网请求物流信息的方式是http://m.kuaidi.com/all/快递名称/订单号.html,我们在项目中只要把我们的参数拼接进行去请求这个地址就可以得到物流信息,但是显示的是一个页面。
获取数据
但是我们关心的也就是物流信息,也就是页面显示的数据,我们并不关心其他的无用的信息,当时我直接的想法是通过curl获取当前页面的信息。
但是打印出来的内容显示的确实“正在查询中”
到这里相信就会明白,当前网站是通过获取传递的参数又再次请求服务器才拿到真正的物流信息,通过开发者工具获取当前网页的请求,发现确实是这样的,当前网页会再次请求一个地址,而返回的就是真实的物流信息。
它在请求的地址是http://m.kuaidi.com/mindex-ajaxselectcourierinfo-886241079004-tiantian.html,而得到的数据是
可以看到这就是我们真正想要的信息,所以我们curl请求的真正地址的http://m.kuaidi.com/mindex-ajaxselectcourierinfo-订单号-快递名称.html,在我们写curl的时候要模拟我们请求是从浏览器发出的,不然它返回的数据是不对的。也就是在curl中添加
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
关于在PHP中使用curl发送请求,可以看curl详解我们得到的数据从上面可以看到是json数据,我们进行json转数组,转换后的数据如图
转换后的数据都是一个个对象,我们可以进行二次转换。
这次转换也就是对象转换成数组。转换后的数据如图所示
可以看到数据成功的转换成数据。也就是我们想要的数据。
源代码
源代码也就是把上面的所有操作封装起来,而使用时,只要调用方法传递两个参数(订单号,快递名称),返回的数据就是处理过的数据。
<?phpnamespace Wxapi\Controller;use Think\Controller;class KuaidiController extends Controller{ /** * @param $kd_number 快递名称 * @param $order_sn 订单号 * @return array * 使用快递网获取物流信息 */ public function getData($kd_number,$order_sn){ $pageURL="http://m.kuaidi.com/mindex-ajaxselectcourierinfo-{$order_sn}-{$kd_number}.html"; $contents=$this -> _url($pageURL); $data = json_decode($contents); $data = $this -> objectToArray($data); return $data; } /** * @param $url 请求的url * @return mixed */ function _url($url){ $ch = curl_init(); $timeout = 5; curl_setopt ($ch, CURLOPT_URL, "$url"); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $contents = curl_exec($ch); curl_close($ch); return $contents; } //转换成数组 function objectToArray($e){ $e=(array)$e; foreach($e as $k=>$v){ if( gettype($v)=='resource' ) return; if( gettype($v)=='object' || gettype($v)=='array' ) $e[$k]=(array)$this -> objectToArray($v); } return $e; }}
关于快递公司的名称,不是快递公司的编号。快递公司的编号可以下载文档自行查找。快递网编号
总结
这种方法等于说就是爬网页的数据,获取有利于我们的数据,现在有很多网站都提供了接口帮助我们获取物流信息,我们可以通过申请接口来对接到我们的项目中,并且大多数接口都是免费的。
- curl获取快递网物流信息
- 快递鸟获取物流信息的接口
- 通过快递100 api 获取物流信息
- 模拟快递100请求 通过快递单号获取物流信息
- php yii1.0快递100接口获取物流信息
- 快递物流信息推送功能分析
- [安卓开发] 快递物流信息布局
- 使用免费快递接口查询物流信息
- 使用快递100接口查看物流信息
- Jquery get 方法跨域 查快递物流信息
- SAP系统直接查询物流、快递跟踪信息
- 快递查询API调用,获得物流单号的跟踪信息
- 免费快递物流轨迹信息查询接口API对接方法
- 快递物流助手
- 快递物流查询
- 快递物流时间轴
- php获取电商物流信息
- curl获取12306订票信息
- [UOJ 220]网格:Tarjan
- mysql添加新的一列作为主键以及修改列
- java学习笔记2类和对象
- 第一篇博客-自己的几点感想
- 微信抢红包插件与Android辅助功能
- curl获取快递网物流信息
- java源文件当中可以有多个类,但是为什么只能有一个public类呢?
- Xposed框架之函数Hook学习
- 面试遇到的题目(一)
- H5小白入门笔记(2)
- Java接口,抽象类,继承
- 理解Spring+SpringMVC+Hibernate开发流程,附一定源码(一)
- node 使用 import
- java的静态方法可以直接用类名调用的理解