用PHP模拟登录WAP飞信实现飞信发送
来源:互联网 发布:淘宝添加不了购物车 编辑:程序博客网 时间:2024/05/17 23:10
目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己动手实现一个这样的一个接口,我这里给出的思路非常简单:通过模拟登录WAP版飞信,来实现发飞信等操作。选择WAP飞信主要是因为其界面比较简单,容易分析,并且没有验证码。
1. 安装Firefox插件wmlbrowser
这样我们就能直接用Firefox浏览WAP网页了,并且还可以利用Firebug对界面进行分析。下载地址:https://addons.mozilla.org/zh-CN/firefox/search/?q=wmlbrowser&cat=all&x=17&y=11
2. 登录页面的分析
WAP飞信入口为http://f.10086.cn/,点击“畅聊WAP飞信”进入登录页面(http://f.10086.cn/im/login/login.action)。通过Firebug可以看出:
共有3个字段:pass(密码)、loginstatus(登录状态)、m(手机号)
提交到的action:http://f.10086.cn/im/login/inputpasssubmit1.action
其实获取表单提交的字段,这里有一种取巧的办法:修改action,让它指向自己的程序,如下图:
我把action改为了本地的一个php程序,这个程序只是简单的一句print_r($_POST),得到的结果为:
这些内容就是表单要提交的数据。
3. 用CURL实现模拟登录操作
从上面的分析看,登录时提交的内容还是比较简单的,没有验证码,也没有防跨域提交的hash值的校验。然后我们用CURL模拟提交这个登录表单。其实就是发送了一个POST方式的HTTP请求,CURL可以把返回的Cookie保存成一个文件。之后的发送飞信等操作将会用到这个Cookie文件。
代码如下:
01
$cookie
= dirname(
__FILE__
).
'/cookie.txt'
;
02
$post
=
array
(
03
'm'
=>
'13700001234'
,
04
'pass'
=>
'123456'
,
05
'loginstatus'
=> 1,
06
);
07
08
$curl
= curl_init(
'http://f.10086.cn/im/login/inputpasssubmit1.action'
);
09
curl_setopt(
$curl
, CURLOPT_HEADER, 0);
10
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
11
curl_setopt(
$curl
, CURLOPT_COOKIEJAR,
$cookie
);
// 注意这里!保存Cookie
12
curl_setopt(
$curl
, CURLOPT_POST, 1);
13
curl_setopt(
$curl
, CURLOPT_POSTFIELDS, http_build_query(
$post
));
14
$result
= curl_exec(
$curl
);
15
curl_close(
$curl
);
是否登录成功,可以判断$result的值。
4. 携带Cookie,给自己发送飞信
给自己发飞信比给好友发相对简单一些,有个专门的页面。可以从“登录后的首页 => 资料 => 给自己发短信”进入,地址为:
http://f.10086.cn/im/user/sendMsgToMyself.action。
用上面同样的方法分析表单:
只有一个字段:msg (短信内容)
提交到的action:http://f.10086.cn/im/user/sendMsgToMyselfs.action
利用CURL向这个URL发送POST方式的请求,并加上上面保存到的Cookie,下面是代码:
01
$post
=
array
(
02
'msg'
=>
'Hello Fetion'
,
03
);
04
05
$curl
= curl_init(
'http://f.10086.cn/im/user/sendMsgToMyselfs.action'
);
06
curl_setopt(
$curl
, CURLOPT_HEADER, 0);
07
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
08
curl_setopt(
$curl
, CURLOPT_COOKIEFILE,
$cookie
);
// 注意这里!
09
curl_setopt(
$curl
, CURLOPT_POST, 1);
10
curl_setopt(
$curl
, CURLOPT_POSTFIELDS, http_build_query(
$post
));
11
$result
= curl_exec(
$curl
);
12
curl_close(
$curl
);
根据返回的$result可以判断出是否发送成功。
5. 给好友发送飞信之前,先获得好友手机号对应的userid
因为给好友发送飞信的表单提交的是userid而不是手机号(这个表单的分析在下一步),所以我们必须想办法找出手机号所对应的userid。我这里利用的是“搜索好友”的功能,就在飞信登录后的首页,如下图:
按手机号搜索可以得到一个唯一并准确的结果,然后我们再用正则把结果页中的userid匹配出来。
首先分析这个表单:
发送的字段:searchText (只有一个)
提交到的action:http://f.10086.cn/im/index/searchOtherInfoList.action
用CURL模拟发送请求,代码如下:
01
$post
=
array
(
02
'searchText'
=>
'18700008888'
,
03
);
04
05
$curl
= curl_init(
'http://f.10086.cn/im/index/searchOtherInfoList.action'
);
06
curl_setopt(
$curl
, CURLOPT_HEADER, 0);
07
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
08
curl_setopt(
$curl
, CURLOPT_COOKIEFILE,
$cookie
);
// 注意这里!
09
curl_setopt(
$curl
, CURLOPT_POST, 1);
10
curl_setopt(
$curl
, CURLOPT_POSTFIELDS, http_build_query(
$post
));
11
$result
= curl_exec(
$curl
);
12
curl_close(
$curl
);
用正则获得结果中的userid:
1
preg_match(
'/toinputMsg\.action\?touserid=(\d+)/si'
,
$result
,
$matches
);
2
$userid
= isset(
$matches
[1]) ?
$matches
[1] :
''
;
这块可以做一个当找不到userid时的提示。
6. 给好友发送飞信
给好友发飞信的界面,可以随便点一个好友进入。表单HTML如下图:
分析这个表单:
提交的字段:backUrl、touchTitle、touchTextLength、msg
action:http://f.10086.cn/im/chat/sendMsg.action?touserid=上面取得的userid
代码如下:
01
$post
=
array
(
02
'msg'
=>
'Hello Fetion'
,
03
);
04
05
$curl
= curl_init(
'http://f.10086.cn/im/chat/sendMsg.action?touserid='
.
$userid
); // 注意这里!
06
curl_setopt(
$curl
, CURLOPT_HEADER, 0);
07
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
08
curl_setopt(
$curl
, CURLOPT_COOKIEFILE,
$cookie
);
// 注意这里!
09
curl_setopt(
$curl
, CURLOPT_POST, 1);
10
curl_setopt(
$curl
, CURLOPT_POSTFIELDS, http_build_query(
$post
));
11
$result
= curl_exec(
$curl
);
12
curl_close(
$curl
);
上面的$post只包含了一个字段,因为试验的时候我发现其他字段不是必须的。可以根据返回的$result判断发送成功与否。
7. 退出飞信
如果不退出的话,则登录后的短时间内如果正好有人给你发飞信,就只能在WAP飞信上查看了,而不能自动发到你的手机上。退出的操作比较简单,只是发送了一个GET方式的请求。“退出”的链接可以在登录后首页的右下角看到,如图:
代码如下:
1
$curl
= curl_init(
'http://f.10086.cn/im/index/logoutsubmit.action'
);
2
curl_setopt(
$curl
, CURLOPT_HEADER, 0);
3
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
4
curl_setopt(
$curl
, CURLOPT_COOKIEFILE,
$cookie
);
// 注意这里!
5
$result
= curl_exec(
$curl
);
6
curl_close(
$curl
);
8. 总结
通过对以上代码的整理,可以做出一个飞信发送类。也可以做成一个飞信发送的服务,如简单易用的HTTP方式的接口。飞信最大的好处就在于免费,并能实时将信息发送到手机上,可以做一些类似定时短信或监测提醒的功能。
我这里封装成了一个PHP飞信类,可以从Google Code上下载:http://code.google.com/p/php-fetion/downloads/list。注意请勿滥用,以避免封号之类的麻烦。
from: http://blog.quanhz.com/archives/118
php飞信下载地址:http://www.oschina.net/code/snippet_114572_12155
- 用PHP模拟登录WAP飞信实现飞信发送
- 飞信模拟登录
- 飞信借口, php发送飞信
- PHP 发送飞信消息
- 模拟微信登录
- 模拟微信登录
- PHP微信支付开发,微信外浏览器实现WAP微信支付
- PHP微信公众号扫码模拟登录功能
- 飞信PHP接口|飞信PHP API免费发送手机短信接口,thinkphp发送单条函数
- 微信的模拟登录
- 用PHP实现飞信api接口发飞信短信
- 用PHP实现飞信api接口发飞信短信
- 代替飞信发送短信
- 利用飞信发送天气预报
- 飞信发送手机短信接口
- php 环信发送私信
- php发送短信(调用网易云信实现)
- php实现发送微信模板消息的方法
- 关于网络编程(服务端)的一些笔记
- 再看《程序员文史综合题》。。。
- Android Study —— Activities
- GDI+繪制極坐標圖、雷達圖
- ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
- 用PHP模拟登录WAP飞信实现飞信发送
- STL中sets的基本用法
- poj3565 Ants
- 使用RecoverySystem.installPackage实现 android卡刷系统
- Xilinx FPGA设计经验小谈 2012_7_28
- matlab和c的小数问题
- 场景记忆法--信管考试通关技巧
- Linux常用C函数-内存及字符串操作篇
- DedeCMS---首页调用行业的所有分类