Home  >  Article  >  php教程  >  用PHP模拟登录WAP飞信实现飞信发送

用PHP模拟登录WAP飞信实现飞信发送

WBOY
WBOYOriginal
2016-06-06 19:55:551150browse

目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己动手实现一个这样的一个接口,我这里给出的思路非常简单:通过模拟登录WAP版飞信,来实现发飞信等操作。选择WAP飞信主要是因

目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己动手实现一个这样的一个接口,我这里给出的思路非常简单:通过模拟登录WAP版飞信,来实现发飞信等操作。选择WAP飞信主要是因为其界面比较简单,容易分析,并且没有验证码。

1. 安装Firefox插件wmlbrowser

这样我们就能直接用Firefox浏览WAP网页了,并且还可以利用Firebug对界面进行分析。下载地址:https://addons.mozilla.org/zh-CN/firefox/search/?q=wmlbrowser&cat=all&x=17&y=11

用PHP模拟登录WAP飞信实现飞信发送

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,让它指向自己的程序,如下图:

用PHP模拟登录WAP飞信实现飞信发送

我把action改为了本地的一个php程序,这个程序只是简单的一句print_r($_POST),得到的结果为:

用PHP模拟登录WAP飞信实现飞信发送

这些内容就是表单要提交的数据。

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。我这里利用的是“搜索好友”的功能,就在飞信登录后的首页,如下图:

用PHP模拟登录WAP飞信实现飞信发送

按手机号搜索可以得到一个唯一并准确的结果,然后我们再用正则把结果页中的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如下图:

用PHP模拟登录WAP飞信实现飞信发送

分析这个表单:

提交的字段: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方式的请求。“退出”的链接可以在登录后首页的右下角看到,如图:

用PHP模拟登录WAP飞信实现飞信发送

代码如下:

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn