SINA Weibo에 대한 PHP CURL 시뮬레이션 로그인

WBOY
풀어 주다: 2016-07-25 09:02:32
원래의
1100명이 탐색했습니다.

최근 직장에서 @my 자신의 데이터인 http://weibo.com/at/weibo 의 데이터를 얻어야 하는데 인터페이스가 없고 페이지만 캡처할 수 있습니다. 코드는 아래에 게시되어 있습니다 출처: http://summerbluet.com/704


  1. /**
  2. * CJ의 Sina Weibo 로그인을 시뮬레이션하는 데 사용됩니다( http://www.summerbluet.com )
  3. */
  4. /**프로젝트 경로 정의*/
  5. define('PROJECT_ROOT_PATH' , dirname(__FILE__));
  6. define('COOKIE_PATH' , PROJECT_ROOT_PATH );
  7. // 범용 타임스탬프
  8. define('TIMESTAMP', time());
  9. / / 문제 발생 시 켜질 수 있습니다. 디버깅을 위해 현재 폴더
  10. define('DEBUG', false);
  11. /**시뮬레이션된 로그인에 사용되는 Sina 계정*/<🎜에 LOG 파일이 생성됩니다. > $username = "";
  12. $password = "";
  13. /* 실행 */
  14. $weiboLogin = new weiboLogin( $username, $password );
  15. exit($ weiboLogin ->showTestPage( 'http://weibo.com/at/comment' ));
  16. class weiboLogin {
  17. private $cookiefile;
  18. private $username;
  19. private $password;
  20. function __construct( $username, $password )
  21. {
  22. ( $username =='' || $password=='' ) &&exit( "입력해 주세요 사용자 이름 비밀번호" );
  23. $this->cookiefile = COOKIE_PATH.'/cookie_sina_'.substr(base64_encode($username), 0, 10);
  24. $this->username = $ 사용자 이름;
  25. $this->password = $password;
  26. }
  27. /**
  28. * CURL 요청
  29. * @param String $url 요청 주소
  30. * @param Array $data 요청 데이터
  31. */
  32. 함수 컬 요청($url, $data = false)
  33. {
  34. $ch = 컬_init();
  35. $option = array(
  36. CURLOPT_URL => $url,
  37. CURLOPT_HEADER => 0,
  38. CURLOPT_HTTPHEADER => 배열(' Accept -Language: zh-cn','Connection: Keep-Alive','Cache-Control: no-cache'),
  39. CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 ( KHTML, Gecko와 유사) Chrome/21.0.1180.79 Safari/537.1",
  40. CURLOPT_FOLLOWLOCATION => TRUE,
  41. CURLOPT_MAXREDIRS => 4,
  42. CURLOPT_RETURNTRANSFER => TRUE,
  43. CURLOPT_COOKIEJAR => ; this ->cookiefile,
  44. CURLOPT_COOKIEFILE => $this->cookiefile
  45. );
  46. if ( $data ) {
  47. $option[CURLOPT_POST] = 1;
  48. $ 옵션[CURLOPT_POSTFIELDS] = $data;
  49. }
  50. 컬_setopt_array($ch, $option);
  51. $response = 컬_exec($ch);
  52. if (curl_errno( $ ch) > 0) {
  53. 종료("CURL ERROR:$url " .curl_error($ch));
  54. }
  55. curl_close($ch);
  56. return $response;
  57. }
  58. /**@desc CURL은 Sina 로그인을 시뮬레이션합니다.*/
  59. function doSinaLogin()
  60. {
  61. // 1단계: 틱킷 가져오기
  62. $preLoginData = $this->curlRequest( ' http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=' .
  63. base64_encode($this->username) '&client=ssologin.js(v1 . 3.16)');
  64. preg_match('/sinaSSOController.preloginCallBack((.*))/', $preLoginData, $preArr);
  65. $jsonArr = json_decode($preArr[1], true);
  66. $this->debug('debug_1_Tickit', $preArr[1]);
  67. if (is_array($jsonArr)) {
  68. // 2단계: 인증 수행
  69. $postArr = array( 'entry' => 'weibo',
  70. 'gateway' => 1,
  71. 'from' => '',
  72. 'vsnval' => '',
  73. 'savestate' => 7,
  74. 'useticket' => 1,
  75. 'ssosimplelogin' => 1,
  76. 'su' => ;username)),
  77. 'service' => 'miniblog',
  78. 'servertime' => $jsonArr['servertime'],
  79. 'nonce' => ],
  80. 'pwencode' => 'wsse',
  81. 'sp' => sha1(sha1(sha1($this->password)) . $jsonArr['servertime'] . $jsonArr[ 'nonce ']),
  82. '인코딩' => 'UTF-8',
  83. 'url' => 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController .feedBackUrlCallBack',
  84. '반환 유형' => 'META');
  85. $loginData = $this->curlRequest('http://login.sina.com.cn/sso/login .php?client =ssologin.js(v1.3.19)', $postArr);
  86. $this->debug('debug_2_Certification_raw', $loginData);
  87. // 3단계: SSOLoginState
  88. if ($loginData) {
  89. $matchs = $loginResultArr =array();
  90. preg_match('/replace('(.*?)')/', $loginData, $matchs);
  91. $this->debug('debug_3_Certification_result', $matchs[1])
  92. $loginResult = $this->curlRequest( $matchs[1] ) ;
  93. preg_match('/feedBackUrlCallBack((.*?))/', $loginResult, $loginResultArr);
  94. $userInfo = json_decode($loginResultArr[1],true);
  95. $this ->debug('debug_4_UserInfo', $loginResultArr[1]);
  96. } else {
  97. exit('로그인 실패.');
  98. }
  99. } else {
  100. exit( '서버 틱 실패');
  101. }
  102. }
  103. /**로그인 상황 테스트, 통화 참조*/
  104. function showTestPage( $url ) {
  105. $file_holder = $this->curlRequest( $url );
  106. // if 로그인되어 있지 않은 경우 로그인 후 다시 시도하세요
  107. $isLogin = strpos( $file_holder, 'class="user_name"');
  108. if ( !$isLogin ){
  109. unset($file_holder) ;
  110. $this->doSinaLogin();
  111. $file_holder = $this->curlRequest( $url );
  112. }
  113. return $file_holder ;
  114. }
  115. /** 디버그*/
  116. function debug( $file_name, $data ) {
  117. if ( DEBUG ) {
  118. file_put_contents( $file_name.'.txt', $data );
  119. }
  120. }
  121. }
코드 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!