目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己动手实现一个这样的一个接口,我这里给出的思路非常简单:通过模拟登录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文件。

代码如下:

$cookie = dirname(__FILE__).'/cookie.txt';

$post = array(

'm' => '13700001234',

'pass' => '123456',

'loginstatus' => 1,

);

$curl = curl_init('http://f.10086.cn/im/login/inputpasssubmit1.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); // 注意这里!保存Cookie

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

$result = curl_exec($curl);

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,下面是代码:

$post = array(

'msg' => 'Hello Fetion',

);

$curl = curl_init('http://f.10086.cn/im/user/sendMsgToMyselfs.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); // 注意这里!

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

$result = curl_exec($curl);

curl_close($curl);

根据返回的$result可以判断出是否发送成功。

5. 给好友发送飞信之前,先获得好友手机号对应的userid

因为给好友发送飞信的表单提交的是userid而不是手机号(这个表单的分析在下一步),所以我们必须想办法找出手机号所对应的userid。我这里利用的是“搜索好友”的功能,就在飞信登录后的首页,如下图:

按手机号搜索可以得到一个唯一并准确的结果,然后我们再用正则把结果页中的userid匹配出来。

首先分析这个表单:

发送的字段:searchText (只有一个)

提交到的action:http://f.10086.cn/im/index/searchOtherInfoList.action

用CURL模拟发送请求,代码如下:

$post = array(

'searchText' => '18700008888',

);

$curl = curl_init('http://f.10086.cn/im/index/searchOtherInfoList.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); // 注意这里!

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

$result = curl_exec($curl);

curl_close($curl);

用正则获得结果中的userid:

preg_match('/toinputMsg\.action\?touserid=(\d+)/si', $result, $matches);

$userid = isset($matches[1]) ? $matches[1] : '';

这块可以做一个当找不到userid时的提示。

6. 给好友发送飞信

给好友发飞信的界面,可以随便点一个好友进入。表单HTML如下图:

分析这个表单:

提交的字段:backUrl、touchTitle、touchTextLength、msg

action:http://f.10086.cn/im/chat/sendMsg.action?touserid=上面取得的userid

代码如下:

$post = array(

'msg' => 'Hello Fetion',

);

$curl = curl_init('http://f.10086.cn/im/chat/sendMsg.action?touserid='.$userid); // 注意这里!

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); // 注意这里!

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

$result = curl_exec($curl);

curl_close($curl);

上面的$post只包含了一个字段,因为试验的时候我发现其他字段不是必须的。可以根据返回的$result判断发送成功与否。

7. 退出飞信

如果不退出的话,则登录后的短时间内如果正好有人给你发飞信,就只能在WAP飞信上查看了,而不能自动发到你的手机上。退出的操作比较简单,只是发送了一个GET方式的请求。“退出”的链接可以在登录后首页的右下角看到,如图:

代码如下:

$curl = curl_init('http://f.10086.cn/im/index/logoutsubmit.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); // 注意这里!

$result = curl_exec($curl);

curl_close($curl);

8. 总结

通过对以上代码的整理,可以做出一个飞信发送类。也可以做成一个飞信发送的服务,如简单易用的HTTP方式的接口。飞信最大的好处就在于免费,并能实时将信息发送到手机上,可以做一些类似定时短信或监测提醒的功能。

我这里封装成了一个PHP飞信类。

点击下载:phpfetion v1.2.0 模拟登录WAP飞信发送短信

http://www.bkjia.com/PHPjc/364736.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/364736.htmlTechArticle目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己...

php登陆飞信,用PHP模拟登录WAP飞信实现飞信发送_PHP教程相关推荐

  1. php提交飞信,用PHP模拟登录WAP飞信实现飞信发送

    [php]代码库$post = array( 'msg' => 'Hello Fetion', ); $curl = curl_init('http://f.10086.cn/im/user/s ...

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

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

  3. 微博pythonurllib登陆是什么_python模拟登录新浪微博抓取数据(cookielib和urllib2)

    http是无连接的状态协议,但是客户端和服务器端需要保持一些相互信息,比如cookie,有了cookie,服务器才能知道刚才是这个用户登录了网站,才会给予客户端访问一些页面的权限. 用浏览器登录新浪微 ...

  4. curl php 模拟来源_PHP cURL实现模拟登录与采集使用方法详解教程

    对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...

  5. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  6. php模拟登陆青果教务系统,模拟登录 - php CURL模拟登陆正方教务系统

    代码如下 $cookie_file = tempnam('./temp','cookie'); $login_url = 'http://211.64.47.129/default_ysdx.aspx ...

  7. python3 模拟登陆_python3作业:模拟登录

    __author__ = "bin007" customer = {}#存储用户信息 #处理用户信息文件 try: with open('login.txt','r',encodi ...

  8. python模拟登录网易163邮箱并发送SOS邮件

    基本环境配置 1. Selenium - 建议使用低版本的Python-Selenium库,因为高版本在Chrome中不支持. pip3 install selenium==2.48.0 2. chr ...

  9. 飞信2010分析 – SSI登录

    飞信2010分析 – SSI登录 2010年4月1日 | 分类: 飞信哪些事儿 | 标签: 一个月前,移动飞信发布了飞信2010版,也就是V3.6版(飞信2008版为V3.5),并升级了飞信的通信协议 ...

  10. python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?

    文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...

最新文章

  1. 手把手实现火爆全网的视频特效 “蚂蚁呀嘿”,太魔性了
  2. 阿里云上测试服务器的搭建
  3. 堆(heap)和栈(stack)
  4. 使用plsql创建定时任务并执行
  5. sqlite to mysql_SqliteToMysql官方版
  6. cmder上传文件到服务器,wget 结合everything上传文件到服务器端(以及更改ip地址)...
  7. 树莓派静态IP配置方法
  8. 领域模型(domain model)贫血模型(anaemic domain model)充血模型(rich domain model)
  9. 如何才能成为编程高手?别人都不告诉你的东西,我来说给你听!
  10. Java线程池execute()方法源码解析
  11. 趣谈Linux操作系统01:概述
  12. Linux之磁盘管理——磁盘分区
  13. 每日一句20191126
  14. 【LeetCode】题解合集(JavaScript版)
  15. 浅谈视频编解码器的工作原理和应用领域
  16. 动作捕捉系统FOHEART·MAGIC
  17. ubuntu 安装osx 主题 转自linux公社
  18. 国产图形化的msf——Viper初体验
  19. Win7 突然没声音 无法播放测试音调
  20. 【splishsplash】修复catch.hpp的问题

热门文章

  1. oracle 创建新的表空间,oracle创建表空间新建新用户并受权
  2. java diamond 运算符_解决:Java source1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符...
  3. UEditor定制工具栏图标
  4. 计算机图形学及前沿应用讲座心得,王泽晶-计算机图形学技术前沿讲座总结报告...
  5. Shiro基本入门教程—叩丁狼Java培训
  6. 三款适用于企业建站的CMS建站系统
  7. WinRAR v5.71 简体中文正式版
  8. 如何设置快速启动栏 win7 快速启动栏 快速启动栏不见了
  9. html调用wmp,web页面中嵌入window media player,支持IE和Chrome
  10. 怎样把QQ群降级(1000人降到200或500人,500人降到200)