php登陆飞信,用PHP模拟登录WAP飞信实现飞信发送_PHP教程
目前網(wǎng)上有很多第三方的飛信接口。缺點是都不太穩(wěn)定,很多到現(xiàn)在都失效無法使用了,另外我們還會擔(dān)心信息的外泄。其實我們可以自己動手實現(xiàn)一個這樣的一個接口,我這里給出的思路非常簡單:通過模擬登錄WAP版飛信,來實現(xiàn)發(fā)飛信等操作。選擇WAP飛信主要是因為其界面比較簡單,容易分析,并且沒有驗證碼。
1. 安裝Firefox插件wmlbrowser
這樣我們就能直接用Firefox瀏覽WAP網(wǎng)頁了,并且還可以利用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(登錄狀態(tài))、m(手機號)
提交到的action:http://f.10086.cn/im/login/inputpasssubmit1.action
其實獲取表單提交的字段,這里有一種取巧的辦法:修改action,讓它指向自己的程序,如下圖:
我把action改為了本地的一個php程序,這個程序只是簡單的一句print_r($_POST),得到的結(jié)果為:
這些內(nèi)容就是表單要提交的數(shù)據(jù)。
3. 用CURL實現(xiàn)模擬登錄操作
從上面的分析看,登錄時提交的內(nèi)容還是比較簡單的,沒有驗證碼,也沒有防跨域提交的hash值的校驗。然后我們用CURL模擬提交這個登錄表單。其實就是發(fā)送了一個POST方式的HTTP請求,CURL可以把返回的Cookie保存成一個文件。之后的發(fā)送飛信等操作將會用到這個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,給自己發(fā)送飛信
給自己發(fā)飛信比給好友發(fā)相對簡單一些,有個專門的頁面。可以從“登錄后的首頁 => 資料 => 給自己發(fā)短信”進入,地址為:
http://f.10086.cn/im/user/sendMsgToMyself.action。
用上面同樣的方法分析表單:
只有一個字段:msg (短信內(nèi)容)
提交到的action:http://f.10086.cn/im/user/sendMsgToMyselfs.action
利用CURL向這個URL發(fā)送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);
根據(jù)返回的$result可以判斷出是否發(fā)送成功。
5. 給好友發(fā)送飛信之前,先獲得好友手機號對應(yīng)的userid
因為給好友發(fā)送飛信的表單提交的是userid而不是手機號(這個表單的分析在下一步),所以我們必須想辦法找出手機號所對應(yīng)的userid。我這里利用的是“搜索好友”的功能,就在飛信登錄后的首頁,如下圖:
按手機號搜索可以得到一個唯一并準確的結(jié)果,然后我們再用正則把結(jié)果頁中的userid匹配出來。
首先分析這個表單:
發(fā)送的字段:searchText (只有一個)
提交到的action:http://f.10086.cn/im/index/searchOtherInfoList.action
用CURL模擬發(fā)送請求,代碼如下:
$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);
用正則獲得結(jié)果中的userid:
preg_match('/toinputMsg\.action\?touserid=(\d+)/si', $result, $matches);
$userid = isset($matches[1]) ? $matches[1] : '';
這塊可以做一個當(dāng)找不到userid時的提示。
6. 給好友發(fā)送飛信
給好友發(fā)飛信的界面,可以隨便點一個好友進入。表單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只包含了一個字段,因為試驗的時候我發(fā)現(xiàn)其他字段不是必須的。可以根據(jù)返回的$result判斷發(fā)送成功與否。
7. 退出飛信
如果不退出的話,則登錄后的短時間內(nèi)如果正好有人給你發(fā)飛信,就只能在WAP飛信上查看了,而不能自動發(fā)到你的手機上。退出的操作比較簡單,只是發(fā)送了一個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. 總結(jié)
通過對以上代碼的整理,可以做出一個飛信發(fā)送類。也可以做成一個飛信發(fā)送的服務(wù),如簡單易用的HTTP方式的接口。飛信最大的好處就在于免費,并能實時將信息發(fā)送到手機上,可以做一些類似定時短信或監(jiān)測提醒的功能。
我這里封裝成了一個PHP飛信類。
點擊下載:phpfetion v1.2.0 模擬登錄WAP飛信發(fā)送短信
http://www.bkjia.com/PHPjc/364736.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/364736.htmlTechArticle目前網(wǎng)上有很多第三方的飛信接口。缺點是都不太穩(wěn)定,很多到現(xiàn)在都失效無法使用了,另外我們還會擔(dān)心信息的外泄。其實我們可以自己...
總結(jié)
以上是生活随笔為你收集整理的php登陆飞信,用PHP模拟登录WAP飞信实现飞信发送_PHP教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2010环境下wincap的配置
- 下一篇: 动态规划算法php,php算法学习之动态