PHP を使用して QQ メールボックスへのログインをシミュレートして QQ フレンド リストを取得する方法

WBOY
リリース: 2016-07-25 08:53:02
オリジナル
1969 人が閲覧しました
  1. /**

  2. * @file class.qqhttp.php
  3. * QQメールボックスログイン取得クラス
  4. * @author wc
  5. * @site bbs.it-home.org
  6. */

  7. class QQHttp {

  8. var $cookie = '';
  9. function __cunstrut() {
  10. }
  11. function makeForm() {
  12. $form = array(
  13. 'url' => "http://mail.qq.com/cgi-bin/loginpage",
  14. );
  15. $data = $this->curlFunc($form);
  16. preg_match('/name="ts"svalue="(d+)"/',$data['html'], $tspre);
  17. $ts = $tspre[1];
  18. preg_match('/action="http://(md+).mail.qq.com/',$data['html'], $server);
  19. $server_no = $server[1];
  20. /* login.html ダウンロード */
  21. $html = file_get_contents(dirname(__FILE__).'/login.htm');
  22. $html = str_replace('{_ts_}',$ts, $html); ('{_server_no_}',$server_no, $html);
  23. return $html; }
  24. 関数curlFunc($array)
  25. {
  26. $ch =curl_init()
  27. curl_setopt($ch, CURLOPT_URL, $array[ 'url']);
  28. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  29. if( isset($array['header']) && $array['header'] ) {
  30. curl_setopt($ch, CURLOPT_HEADER, 1) ;
  31. }
  32. if(isset($array['httpheader'])) {
  33. curl_setopt($ch, CURLOPT_HTTPHEADER, $array['httpheader']);
  34. }
  35. if(isset($array['referer'])) {
  36. curl_setopt($ch, CURLOPT_REFERER, $array['referer']);
  37. }
  38. if( isset($array['post']) ) {
  39. curl_setopt($ch, CURLOPT_POST, 1 );
  40. curl_setopt($ch, CURLOPT_POSTFIELDS, $array['post']);
  41. }
  42. if( isset($array['cookie']) ){
  43. curl_setopt($ch, CURLOPT_COOKIE, $array['cookie']);
  44. }
  45. $r['erro'] =curl_error($ch);
  46. $r['errno'] =curl_errno($ch);
  47. $r['html'] =curl_exec($ch);
  48. $r['http_code'] =curl_getinfo($ch, CURLINFO_HTTP_CODE);
  49. curl_close($ch);
  50. $r を返します;
  51. }
  52. /**
  53. * 認証コード画像と Cookie を取得します
  54. * @param Null
  55. *
  56. * @return array('img'=>String, 'cookie'=>String)
  57. */
  58. function getVFCode ()
  59. {
  60. $vfcode = array(
  61. 'header' => true,
  62. 'cookie' => false,
  63. 'url'=> 'http://ptlogin2.qq.com/getimage?aid='.$_GET['aid'].'&'.@$_GET['t'],
  64. );
  65. $r = $this->curlFunc($vfcode);
  66. if ($r['http_code'] != 200 ) は false を返します。
  67. $data = split("n", $r['html']);
  68. preg_match('/verifysession=([^;]+);/',$data[5], $temp);
  69. $cookie = トリム($temp[1]);
  70. $img = $data[9];
  71. return array('img'=>$img,'cookie'=>$cookie);
  72. }
  73. /**
  74. * qq メールボックスにログインします
  75. *
  76. * @param $cookie getvfcode で生成された Cookie
  77. *
  78. * @return array(
  79. * sid=>String, //ユーザー認証の一意の識別子
  80. *login => Boolean, / /ログインが成功した場合は true、ログインが失敗した場合は false
  81. *server_no => String // サーバー番号
  82. * active Boolean //メールボックスがアクティブ化されていない場合は false
  83. * cookie => String // データクッキーを取得します
  84. *
  85. * );*/
  86. function login($cookie)
  87. {
  88. /* 参数字符串生成 */
  89. $post = array();
  90. foreach($_POST as $k => $v) {
  91. $post[] = $k.'='.urlencode($v);
  92. }
  93. $poststr = implode('&',$post);
  94. $r['server_no'] = $_GET['server_no'];
  95. $login = array(
  96. 'url'=>'http://'.$r['server_no'].'.mail.qq.com/cgi-bin/login?sid=0,2,zh_CN ',
  97. 'header' => true、
  98. 'cookie' => 'verifysession='.$cookie、
  99. 'referer' => 'http://mail.qq.com/cgi-bin/loginpage' ,
  100. 'httpheader'=>array(
  101. "ホスト: " . $r['server_no'] . '.mail.qq.com',
  102. "ユーザーエージェント: Mozilla/5.0 (Windows; U; Windows NT 5.1) ; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4",
  103. "Content-Type: application/x-www-form-urlencoded",
  104. ),
  105. 'post' => $poststr ,
  106. );
  107. $data = $this->curlFunc($login);
  108. $data['html'] = iconv("gb2312", "UTF-8", $data['html']);
  109. if ($data['http_code'] != 200) {
  110. $this->error($data);
  111. false を返します。
  112. }
  113. /* 测试データ据 */
  114. //$data['html'] =file_get_contents('./r.txt');
  115. $r['uin'] = $_POST['uin'];
  116. /* 登陆错误の判断 */
  117. if (preg_match('|errtype=(d)|', $data['html'], $temp_err)) {
  118. $r['login'] = false;
  119. if ($temp_err[1] == 1) {
  120. $r['msg'] = '账号和密码错误';
  121. } elseif ($temp_err[1] == 2) {
  122. $r['msg'] = '验证码错误';
  123. }
  124. $r を返します。
  125. }
  126. /* 登陆成功 */
  127. preg_match('|urlHead="([^"]+)"|i',$data['html'],$temp_url);
  128. $urlhead = $temp_url[1] ;
  129. if (preg_match('|frame_html?sid=([^"]+)"|i',$data['html'],$temp_sid) ) {
  130. $r['sid'] = $temp_sid[1 ];
  131. $r['active'] = true; } elseif (preg_match('|autoactivation?sid=([^&]+)?&|i',$data['html'],$temp_sid) {
  132. $r['sid'] = $temp_sid[1];
  133. $r['active'] = false }
  134. /* 登录後の cookie の获取 ,後の操作中に */
  135. if (preg_match_all ('|Set-Cookie:([^=]+=[^;]+)|i', $data['html'], $new_cookies) ) {
  136. $cookiestr = implode('; ', $new_cookies[ 1]);
  137. $cookiestr .= '; verifysession='.$cookie; }
  138. $r['login'] = true;
  139. $r を返します;
  140. }// bbs.it-home.org
  141. function openEmail($param)
  142. {
  143. $openEmail = array(
  144. 'url'=>'http://'.$param['server_no'].'.mail .qq.com/cgi-bin/autoactivation?actmode=6&sid='.$param['sid'],
  145. 'header' => true,
  146. 'cookie' => $param['cookie'],
  147. 'referer' => 'http://'.$param['server_no'].'mail.qq.com/cgi-bin/autoactivation?sid='.$param['sid'].'&action=reg_activate&actmode =6',
  148. 'httpheader'=>array(
  149. "ホスト: " . $param['server_no'] . '.mail.qq.com',
  150. 'Accept-Charset: gb2312,utf-8;q= 0.7,*;q=0.7',
  151. "ユーザー エージェント: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4 "、
  152. )、
  153. );
  154. $data = $this->curlFunc($openEmail);
  155. if (preg_match('|Set-Cookie:qqmail_activated=0|i', $data['html'])) {
  156. $param['active'] = true;
  157. $param['cookie'] = $param['cookie'] .'; qqmail_activated=0; qqmail_alias=';
  158. }
  159. $param を返します。
  160. }
  161. /**
  162. *
  163. * 友達データを取得します
  164. *
  165. * @param $param = array(
  166. * sid=>String , //ユーザー認証の一意の識別子
  167. * login => Boolean, //ログインが成功した場合は true 、ログインが失敗した場合は false
  168. * server_no => String // サーバー番号
  169. * active => Boolean //true が開かれている、false メールボックスが開かれていない
  170. * cookie => String
  171. *
  172. * );
  173. * @return Array(
  174. * key=>value, // キー: qq 番号、値: ニックネーム
  175. * );*/
  176. function getFriends($param)
  177. {
  178. $friend = array(
  179. 'url'=>'http://'.$param['server_no']. '.mail.qq.com/cgi-bin/addr_listall?type=user&&category=all&sid='.$param['sid'],
  180. 'header' =>
  181. 'cookie' => cookie'],
  182. 'referer' => 'http://m151.mail.qq.com/cgi-bin/addr_listall?sid='.$param['sid'].'&sorttype=null&category=common',
  183. 'httpheader'=>array(
  184. "ホスト: " . $param['server_no'] . '.mail.qq.com',
  185. 'Accept-Charset:utf-8;q=0.7,*;q= 0.7'、
  186. "ユーザー エージェント: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.2.4",
  187. ),
  188. );
  189. $r = $this->curlFunc($friend);
  190. if ($r['http_code'] != 200) {
  191. $this->error($r);
  192. false を返します。
  193. }
  194. $data = $r['html'];
  195. $preg = preg_match_all('|

    ]+/>  ;([^ if ($preg == 0) return array();

  196. $list = array_combine($temp_list[1],$temp_list[2]);
  197. $list を返す;
  198. }
  199. /**
  200. * エラー表示
  201. *
  202. * @param $str array
  203. *
  204. * @return
  205. */
  206. function error($str) {
  207. $str['html'] = str_replace('script','', $str['html']);
  208. var_dump($str);
  209. 終了;
  210. }
  211. }
  212. ?>

复制代码
>>> 更なるphp模拟登录文章、专题链接:php模拟登录 phpカール模拟登录教程大全


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート