>  기사  >  백엔드 개발  >  QQ 친구 목록을 얻기 위해 PHP로 QQ 메일함에 로그인을 시뮬레이션하는 방법

QQ 친구 목록을 얻기 위해 PHP로 QQ 메일함에 로그인을 시뮬레이션하는 방법

WBOY
WBOY원래의
2016-07-25 08:53:021967검색
  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);
  23. $html = str_replace('{_server_no_}',$server_no, $html)
  24. return $html; )
  25. {
  26. $ch = 컬_init();
  27. 컬_setopt($ch, CURLOPT_URL, $array['url'])
  28. 컬_세톱($ch, CURLOPT_RETURNTRANSFER, true); if( isset($array['header']) && $array['header'] ) {
  29. cur_setopt($ch, CURLOPT_HEADER, 1)
  30. }
  31. if(isset($array[' httpheader'])) {
  32. 컬_setopt($ch, CURLOPT_HTTPHEADER, $array['httpheader']);
  33. }
  34. if(isset($array['referer'])) {
  35. cur_setopt($ch, CURLOPT_REFERER, $array['referer']);
  36. }
  37. if( isset($array['post']) ) {
  38. 컬_setopt($ch, CURLOPT_POST, 1 );
  39. 컬_setopt($ch, CURLOPT_POSTFIELDS, $array['post']);
  40. }
  41. if( isset($array['cookie']) ){
  42. cur_setopt($ch, CURLOPT_COOKIE, $array['cookie']);
  43. }
  44. $r['erro'] = 컬_오류($ch);
  45. $r['errno'] = 컬_errno($ch);
  46. $r['html'] = 컬_exec($ch);
  47. $r['http_code'] = cur_getinfo($ch, CURLINFO_HTTP_CODE);
  48. 컬_닫기($ch);
  49. $r 반환;
  50. }
  51. /**
  52. * 인증 코드 이미지 및 쿠키 가져오기
  53. * @param Null
  54. *
  55. * @return array('img'=>String, 'cookie'=>String)
  56. */
  57. function getVFCode ()
  58. {
  59. $vfcode = array(
  60. 'header' => true,
  61. '쿠키' => 거짓,
  62. 'url'=>'http://ptlogin2.qq.com/getimage?aid='.$_GET['aid'].'&'.@$_GET ['t'],
  63. );
  64. $r = $this->curlFunc($vfcode);
  65. if ($r['http_code'] != 200 ) false를 반환합니다.
  66. $data = 분할("n", $r['html']);
  67. preg_match('/verifysession=([^;] );/',$data[5], $temp);
  68. $cookie = 트림($temp[1]);
  69. $img = $data[9];
  70. return array('img'=>$img,'cookie'=>$cookie);
  71. }
  72. /**
  73. * qq 메일박스에 로그인
  74. *
  75. * getvfcode에서 생성된 @param $cookie 쿠키
  76. *
  77. * @return array(
  78. * sid=>String, //User 인증 유일한 표시
  79. * login => Boolean, //로그인에 성공하면 true, 로그인에 실패하면 false
  80. * server_no => String // 서버 번호
  81. * Boolean / /true가 활성화되었습니다. false 이메일이 열리지 않습니다
  82. * cookie => String // 데이터 쿠키 가져오기
  83. *
  84. * );*/
  85. 함수 로그인($cookie)
  86. {
  87. /* 生成参数字符串 */
  88. $post = array();
  89. foreach($_POST as $k => $v) {
  90. $post[] = $k.'='.urlencode($v);
  91. }
  92. $poststr = implode('&',$post);
  93. $r['server_no'] = $_GET['server_no'];
  94. $login = array(
  95. 'url'=>'http://'.$r['server_no'].'.mail.qq.com/cgi-bin/login?sid =0,2,zh_CN',
  96. '헤더' => true,
  97. '쿠키' => 'verifysession='.$cookie,
  98. '추천자' => mail.qq.com/cgi-bin/loginpage',
  99. 'httpheader'=>array(
  100. "호스트: " . $r['server_no'] . '.mail.qq.com',
  101. "사용자 에이전트: 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",
  102. "내용- 유형: application/x-www-form-urlencoded",
  103. ),
  104. 'post' => $poststr ,
  105. );
  106. $data = $this->curlFunc($login);
  107. $data['html'] = iconv("gb2312", "UTF-8", $data['html']);
  108. if ($data['http_code'] != 200) {
  109. $this->error($data);
  110. false를 반환합니다.
  111. }
  112. /* 测试数据 */
  113. //$data['html'] =file_get_contents('./r.txt');
  114. $r['uin'] = $_POST['uin'];
  115. /* 登陆错误적判断 */
  116. if (preg_match('|errtype=(d)|', $data['html'], $temp_err)) {
  117. $r['login' ] = 거짓;
  118. if ($temp_err[1] == 1) {
  119. $r['msg'] = '账号和密码错误';
  120. } elseif ($temp_err[1] == 2) {
  121. $r['msg'] = '验证码错误';
  122. }
  123. $r 반환;
  124. }
  125. /* 登陆成功 */
  126. preg_match('|urlHead="([^"] )"|i',$data['html'],$temp_url);
  127. $ urlhead = $temp_url[1];
  128. if (preg_match('|frame_html?sid=([^"] )"|i',$data['html'],$temp_sid) ) {
  129. $r ['sid'] = $temp_sid[1];
  130. $r['active'] = true
  131. } elseif (preg_match('|autoactivation?sid=([^&] )?&|i' ,$data['html'],$temp_sid) ) {
  132. $r['sid'] = $temp_sid[1]
  133. $r['active'] = false
  134. }
  135. /* 쿠키를 사용하는 데 사용되는 쿠키 */
  136. if (preg_match_all('|Set-Cookie:([^=] =[^;] )|i', $data['html '], $new_cookies) ) {
  137. $cookiestr = implode('; ', $new_cookies[1])
  138. $cookiesr .= '; verifysession='.$cookie;
  139. $r['login'] = 참;
  140. $r['cookie'] = $cookiestr;
  141. $r 반환;
  142. }// bbs.it-home.org
  143. function openEmail($param)
  144. {
  145. $openEmail = array(
  146. 'url'=>'http://'.$ param['server_no'].'.mail.qq.com/cgi-bin/autoactivation?actmode=6&sid='.$param['sid'],
  147. 'header' => true,
  148. ' 쿠키' => $param['cookie'],
  149. '추천자' => 'http://'.$param['server_no'].'mail.qq.com/cgi-bin/autoactivation? sid='.$param['sid'].'&action=reg_activate&actmode=6',
  150. 'httpheader'=>array(
  151. "호스트: " . $param['server_no'] . '.mail .qq.com',
  152. 'Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7',
  153. "사용자 에이전트: 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",
  154. ),
  155. );
  156. $data = $this->curlFunc($openEmail);
  157. if (preg_match('|Set-Cookie:qqmail_activated=0|i', $data['html'])) {
  158. $param['active'] = true;
  159. $param['cookie'] = $param['cookie'] .'; qqmail_활성화=0; qqmail_alias=';
  160. }
  161. return $param;
  162. }
  163. /**
  164. *
  165. * 친구 데이터 가져오기
  166. *
  167. * @param $param = array(
  168. * sid=>String, //사용자 인증의 고유 식별자
  169. * login = > ; Boolean, //로그인에 성공하면 true, 실패하면 false
  170. * server_no => String // 서버 번호
  171. * Boolean //로그인이 활성화되면 false 이메일이 활성화되지 않은 경우
  172. * cookie = > String // 데이터 쿠키 가져오기
  173. *
  174. * )
  175. * @return Array(
  176. * key=>value, // 키: qq 번호, 값: 닉네임
  177. * );*/
  178. function getFriends($param)
  179. {
  180. $friend = array(
  181. 'url'=> ;'http://'.$param['server_no'].'.mail.qq.com/cgi-bin/addr_listall?type=user&&category=all&sid='.$param['sid'],
  182. ' 헤더' => true,
  183. '쿠키' => $param['cookie'],
  184. '추천자' => addr_listall?sid='.$param['sid'].'&sorttype=null&category=common',
  185. 'httpheader'=>array(
  186. "호스트: " . $param['server_no'] . ' .mail.qq.com',
  187. 'Accept-Charset:utf-8;q=0.7,*;q=0.7',
  188. "사용자 에이전트: 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",
  189. ),
  190. );
  191. $r = $this->curlFunc($friend);
  192. if ($r['http_code'] != 200) {
  193. $this->error($r);
  194. false를 반환합니다.
  195. }
  196. $data = $r['html'];
  197. $preg = preg_match_all('|

    ] />  ([^<] )

    |i', $data, $temp_list);
  198. if ($preg == 0) return array();
  199. $list = array_combine($temp_list[1],$temp_list[2]);
  200. $list를 반환합니다.
  201. }
  202. /**
  203. * 오류 표시
  204. *
  205. * @param $str array
  206. *
  207. * @return
  208. */
  209. 함수 오류($str) {
  210. $str['html'] = str_replace('script','', $str ['html']);
  211. var_dump($str);
  212. 종료;
  213. }
  214. }
  215. ?>

复代码
>>> 更多 php模拟登录 文章,专题链接:php模拟登录 php 컬模拟登录教程大전체


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.