使用HttpClient实现申通快递查询
现在网络上有许多网站都提供快递查询功能,集国内外常用快递为一体,免去了记忆各快递公司网址的麻烦,给人们生活带来一点点改便捷。
呵呵,据说的有站长还靠这个赚钱,不过此处并不讲如何进行网赚,只是谈一下如何利用一个PHP的开源类HttpClient实现快递查询的功能。本文主要内容是包括如何获取验证码及COOKIE,实现查询功能,并将结果抓取回来显示。
以申通快递查询为例
首先从这儿http://scripts.incutio.com/httpclient/下载HttpClient.class.php
申通快递查询网页是http://115.238.100.211:8081/result.aspx
利用FireFox 的HttpHeader 插件分析整个查询过程:
1、首次打开http://115.238.100.211:8081/result.aspx
通过GET方式打开result.aspx,显示页面,此时会设置Cookie,Cookie名为ASP.Net_SessionId
2、点击显示验证码,显示出验证码,填写好验证码及单号
通过HttpHeader信息可知,当点击“显示验证码”时,页面是以POST的方式提交一次,POST的内容有:
wen:快递单号码
codestr:验证码,没填为空
button1:值为"显示验证码"
__VIEWSTATE和__EVENTVALIDATION:均为result.aspx生成的数据
提交信息过后再以GET的方式请求VerifyCode.aspx,请求的同时发送Cookie
显示验证码
3、点击查询,显示查询结果,整个查询过程结束
同第2步一样分析,点击“查询”后就只是再POST一次,POST的内容有:
wen:快递单号码
codestr:验证码
button2:值为"查询"
__VIEWSTATE和__EVENTVALIDATION:均为result.aspx生成的数据
PS:通过试验发现,__VIEWSTATE和__EVENTVALIDATION的值不一定要使用最新的,我们可以直接使用以前的值就行
===================分割=============
经过以上3步就可以正确显示查询结果了,下面我们用HttpClient类来实现这个功能。
1、建立index.php页面,引用HttpClient.class.php文件
- PHP code
-
<?phpsesstion_start();require './HttpClient.class.php';$request=new HttpClient('115.238.100.211',8081);$request->setDebug(true);//打开debug模式,方便调试,在正式使用时可以注释该句 $request->setHeadersOnly(true);//因为只用得到Cookies,只需得到HttpHeader就可以了 $request->get('/result.aspx');//请求result.aspx $cookies=$request->getCookies();//获取Cookies并保存在$_SESSION中,或以其他方式保存 $_SESSION['ASP.Net_SessionId']=$cookies['ASP.Net_SessionId']; ?> <form action="do.php" method="post"> 运单号:<input type="text" name="wen" /> 验证码:<input type="text" name="codestr" /><img src="Image.php" /> <input type="submit" value="查询" /> </form>
2、建立Image.php,用来获取验证码图片
- PHP code
-
<?phpsesstion_start();require './HttpClient.class.php';$request=new HttpClient('115.238.100.211',8081); // $request->setDebug(true);//打开debug模式,方便调试,在正式使用时可以注释该句 $postData=array(//$postData为发送的内容 'wen'=>'','codestr'=>'','button1'=>'显示验证码','__VIEWSTATE'=>'/此处不让用太长的字符','__EVENTVALIDATION'=>'/');$request->setCookies($_SESSION);//设置Cookie $request->referer='http://115.238.55.94:8081/result.aspx';//设置Referer,可有可无 $request->post('/result.aspx',$postData);//重新POST $request->get('/VerifyCode.aspx');//请求验证码 header('Content-Type: image/Jpeg; charset=gb2312');//设置Header为image/jpeg,当header为image/jpeg是,打开debug模式将看不到任何东西 print $request->getContent();//显示验证码 ?>
3、建立do.php,用来显示查询结果
- PHP code
-
<?phpsesstion_start();require './HttpClient.class.php';$request=new HttpClient('115.238.100.211',8081);$request->setDebug(true);//打开debug模式,方便调试,在正式使用时可以注释该句 $postData=array(//$postData为发送的内容 'wen'=>$_POST['wen'],'codestr'=>$_POST['codestr'],'button2'=>'查询','__VIEWSTATE'=>'/wEPDwULLTEyNjUzMjYwNzEPZBYCAgMPZBYEAgUPD2QWAh4Jb25rZXlkb3duBaw BaWYoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSl7ICAgaWYgKChldmVudC53aGlj aCA9PSAxMykgfHwgKGV2ZW50LmtleUNvZGUgPT0gMTMpKSB7ICAgZG9jdW1lbnQuZ2V0R WxlbWVudEJ5SWQoJ0J1dHRvbjInKS5jbGljaygpO3JldHVybiBmYWxzZTt9fSAgICBlbH NlIHtyZXR1cm4gdHJ1ZX07IGQCCw8PZBYCHgdvbkNMaWNrBQdjaGVjaygpZGRWBZp31Y8 9SFTztLcto+W51LON+Q==','__EVENTVALIDATION'=>'/wEWBQK34PznAgKdouaVDwKAr8CLCAKM54rGBgK7q7GGCD3 WCeTWZNB9r68c4gT9kMFtFu2X');$request->setCookies($_SESSION);//设置Cookie $request->post('/result.aspx',$data);//发送 $html=$request->getContent();//得到查询结果 echo $html;//显示查询结果 ?>
到此,申通快递整个查询过程就结束了。接下来要做的就是如何处理$html,让显示结果符合你的口位。
其他快递查询大同小异,一个使用示例见 http://www.ickd.cn/shentong.html
除了HttpClient类外,还有Snoopy类也能实现相同功能
注意:由于论坛限制__VIEWSTATE和__EVENTVALIDATION的值中间有回车,如果你要测试用,请删除其中的回车符,或是到 此处下载源码
使用HttpClient实现申通快递查询相关推荐
- PHP get数据 curl实现 申通快递查询
<meta charset="UTF-8"/> <!-- 让网页使用 UTF8 编码 --> <?php/*** @param $url String ...
- 申通物流查询php,申通快递单号查询 | 申通快递查询
申通单号:" /> 备用查询页 ...正在查询,请稍等... 6 Then If Request.Cookies("ip") = Ip Then Response. ...
- 申通快递的物流情况是怎么批量查询的
现在收发快递都是非常平常的一件事情,有时候我们需要掌握快递的物流情况,该如何实现呢?下面小编用快递批量查询高手,以查询申通快递的物流信息为例,教大家操作. 教程之前,我们先来看一下用快递批量查询高手批 ...
- 如何快速查询申通快递物流分析出派件时效
收发,邮寄快递都会有一个运单号,通过这个单号,可以查询运单详细物流信息,并分析出它的派件时效,当有大量的单号时如何快速查询出物流信息,分析出派件时效,下面以查询申通快递单号为例,一起用快递批量查询高手 ...
- 快递鸟顺丰、申通物流查询类通用接口文档
顺丰.申通.圆通.韵达.京东物流轨迹查询类接口文档, 1.在途监控 快递鸟汇集国内外1600多家快递公司的物流轨迹数据,以接口形式开放给用户使用,支持即时查询+订阅两种调用方式,为用户提供全流程的物流 ...
- 如何在电脑上批量查询多个申通快递的物流信息并保存
有没有什么方法能在短时间内把多个申通快递单号的物流批量查询出来呢?小编搜罗了一下还真有,一款名叫"快递批量查询高手"的软件,目前深受快递行业的喜爱,下面小编就以查询申通快递物流为例 ...
- 批量分析申通快递物流,并筛选出两天未更新的单号
申通快递的物流如何在电脑上批量查询呢?近年来申通也算是比较受欢迎的快递公司,发展还算不错.今天小编给大家分享一款查询工具--快递批量查询高手,下面就以快速分析申通物流,并筛选出两天未更新的单号为例,教 ...
- 申通快递:核心业务系统云原生化上云技术详解
简介:如果说,快递行业上半场的竞争拼的是规模.服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力.--周金龙(遥方) 随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移 ...
- #阿里云原生最佳实践# 申通快递:核心业务系统云原生化上云技术详解
随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移,从而享受云计算带来的技术红利.IDC发布的<全球云计算IT基础设施市场预测报告>显示:2019年全球云上的IT基础 ...
最新文章
- 谈谈几个 Spring Cloud 常见面试题及答案
- 签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。
- centos7 qt之程序编译 cant start process “cmake”
- 一篇文章读懂MySQL的各种联合查询
- nginx php 防止跨站,Nginx下多网站单独php-fpm进程目录权限防跨站
- SpringMVC配置静态资源加载, 中文乱码处理,注解驱动
- 将常规项目转换为Maven项目
- 分布式系统面试连环炮
- linux创建新用户及权限
- 分形之科赫(Koch)雪花
- 75 ----平面二次曲线方程的化简、移轴变换、转轴变换、伸缩变换
- 场内玩家追赶,场外玩家乐此不疲,场内场外谁主沉浮?
- android 视频通话框架,Android基于腾讯云实时音视频仿微信视频通话最小化悬浮
- 彩虹色MD主题1 for Sublime Text Typora EmEditor EverEdit
- css斜条纹背景——linear-gradient
- Git commit (amend)
- Chrome 谷歌浏览器 闪黑屏 问题
- 洛谷P1426 小鱼会有危险吗
- 人工智能数据标注平台推荐
- 腾讯拿下基金销售牌照:微信、蚂蚁、东方财富上演“三国杀”