ホームページ  >  記事  >  バックエンド開発  >  PHP CURL による SINA Weibo へのログインのシミュレーション

PHP CURL による SINA Weibo へのログインのシミュレーション

WBOY
WBOYオリジナル
2016-07-25 09:02:321102ブラウズ

最近仕事で http://weibo.com/at/weibo のデータを取得する必要があります。インターフェースはなく、ページを取得することによってのみ取得できます。コードの一部を以下に掲載します 出典: http://サマーブルート.com/704


  1. /**
  2. * CJ (http://www.Summerbluet.com) による Sina Weibo ログインのシミュレートに使用されます
  3. */
  4. /**プロジェクトパスを定義する*/
  5. define('PROJECT_ROOT_PATH' , dirname(__FILE__));
  6. define('COOKIE_PATH' , PROJECT_ROOT_PATH );
  7. // ユニバーサルタイムスタンプ
  8. define('TIMESTAMP', time());
  9. // 問題が発生したときにオンにでき、デバッグ用に現在のフォルダーの下に LOG ファイルが作成されます
  10. define('DEBUG' , false);
  11. /**模擬ログインに使用される Sina アカウント*/
  12. $username = "";
  13. $password = "";
  14. /* Fire Up */
  15. $weiboLogin = new weiboLogin( $username, $password );
  16. exit($weiboLogin->showTestPage( 'http://weibo.com/at/comment' ));
  17. class weiboLogin {
  18. private $cookiefile;
  19. private $username;
  20. private $password;
  21. function __construct ( $username, $password )
  22. {
  23. ( $username =='' || $password=='' ) && exit( "ユーザー名とパスワードを入力してください" );
  24. $this->cookiefile = COOKIE_PATH.' /cookie_sina_'.substr(base64_encode($username), 0, 10);
  25. $this->username = $username;
  26. $this->password = $password;
  27. }
  28. /**
  29. * CURLリクエスト
  30. * @param String $urlリクエストアドレス
  31. * @param Array $dataリクエストデータ
  32. * /
  33. functioncurlRequest($url, $data = false)
  34. {
  35. $ch =curl_init();
  36. $option = array(
  37. CURLOPT_URL => $url,
  38. CURLOPT_HEADER => 0,
  39. CURLOPT_HTTPHEADER => array('Accept-Language: zh-cn','Connection: Keep-Alive','Cache-Control: no-cache'),
  40. CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML、Gecko など) Chrome/21.0.1180.79 Safari/537.1"、
  41. CURLOPT_FOLLOWLOCATION => TRUE、
  42. CURLOPT_MAXREDIRS => 4、
  43. CURLOPT_RETURNTRANSFER => TRUE、
  44. CURLOPT_クッキージャー => $ this-> cookiefile,
  45. CURLOPT_COOKIEFILE => オプション);
  46. $response =curl_exec($ch);
  47. if (curl_errno($ch) > 0) {
  48. exit("CURL ERROR:$url " .curl_error($ch)) ;
  49. }
  50. curl_close( $ch);
  51. return $response;
  52. }
  53. /**@desc CURL は Sina ログインをシミュレートします*/
  54. function doSinaLogin()
  55. {
  56. // ステップ 1: Nickit を取得
  57. $preLoginData = $this-> ;curlRequest('http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=' .
  58. base64_encode($this->username) .'&client=ssologin.js( v1.3.16)') ;
  59. preg_match('/sinaSSOController.preloginCallBack((.*))/', $preLoginData, $preArr);
  60. $jsonArr = json_decode($preArr[1], true);
  61. $this ->debug(' debug_1_Tickit', $preArr[1]);
  62. if (is_array($jsonArr)) {
  63. // ステップ 2: 認定を行う
  64. $postArr = array( 'entry' => 'weibo' ,
  65. 'ゲートウェイ' = > 1,
  66. 'from' => '',
  67. 'savestate' => 1,
  68. ' ssosimplelogin' => 1 ,
  69. 'su' => base64_encode($this->ユーザー名),
  70. 'miniblog',
  71. 'servertime' => '],
  72. 'nonce' => $jsonArr['nonce'],
  73. 'pwencode' => 'wsse',
  74. 'sp' => sha1(sha1($this->パスワード)) . $jsonArr['servertime '] . $jsonArr['nonce']),
  75. 'エンコーディング' => 'UTF-8',
  76. 'url' => ?framelogin=1&callback=parent .sinaSSOController.feedBackUrlCallBack',
  77. 'returntype' => 'META');
  78. $loginData = $this->curlRequest('http://login.sina.com.cn/sso/ login.php?client =ssologin.js(v1.3.19)', $postArr);
  79. $this->debug('debug_2_Certification_raw', $loginData);
  80. // ステップ 3: SSOLoginState
  81. if ($loginData ) {
  82. $matches = $loginResultArr =array();
  83. preg_match('/replace('(.*?)')/', $loginData, $matchs);
  84. $this->debug('debug_3_Certification_result) ', $matchs[ 1]);
  85. $loginResult = $this->curlRequest( $matchs[1] );
  86. preg_match('/feedBackUrlCallBack((.*?))/', $loginResult, $loginResultArr) ;
  87. $userInfo = json_decode($loginResultArr[1],true);
  88. $this->debug('debug_4_UserInfo', $loginResultArr[1]);
  89. } else {
  90. exit('ログインに失敗しました。' );
  91. }
  92. } else {
  93. exit('サーバーティック失敗');
  94. }
  95. }
  96. /**ログイン状況のテスト、参照の呼び出し*/
  97. function showTestPage( $url ) {
  98. $file_holder = $this->curlRequest( $url );
  99. // ログインしていない場合は、ログイン後にもう一度お試しください
  100. $isLogin = strpos( $file_holder, 'class="user_name"');
  101. if ( !$isLogin ){
  102. unset($file_holder);
  103. $this->doSinaLogin();
  104. $file_holder = $this->curlRequest ( $url );
  105. }
  106. return $file_holder ;
  107. }
  108. /**デバッグ*/
  109. function debug( $file_name, $data ) {
  110. if ( DEBUG ) {
  111. file_put_contents( $file_name.'.txt ' , $data );
  112. }
  113. }
  114. }
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。