這裏只給出代碼:php
若是須要詳細的信息聯繫我:896360979web
最近有人問這個微博登錄的不少(可是我這個登錄主要是爲了獲取cookie的,若是想要其餘的用途的話本身還要修改一下)ajax
我寫詳細一點,修改了一下json
cookie換成本身的路徑cookie
username和password換成本身的微博帳號和密碼curl
<?php class Weibo{ public $cookie = ''; public function __construct(){ $this->cookie = 'D:\xampp\htdocs\webtest/cookie.txt'; } /** * CURL請求 輔助微博登陸的 * @param String $url 請求地址 * @param Array $data 請求數據 */ private function curlRequest($url,$data='',$cookieFile=''){ $ch = curl_init(); $option = array( CURLOPT_URL => $url, CURLOPT_HEADER =>0, CURLOPT_HTTPHEADER => array('Expect:'), CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1096.1 Safari/536.6' ); if($cookieFile){ $option[CURLOPT_COOKIEJAR] = $cookieFile; $option[CURLOPT_COOKIEFILE] = $cookieFile; } if($data){ $option[CURLOPT_POST] = 1; $option[CURLOPT_POSTFIELDS] = $data; } curl_setopt_array($ch,$option); $response = curl_exec($ch); if(curl_errno($ch) > 0){ echo "CURL ERROR:$url ".curl_error($ch); } curl_close($ch); return $response; } /** * 微博用戶登陸 * */ public function login($username,$password,$cookie='1',$style='1'){ //設置cookie的使用文件號 $cookieFile = $this->cookie; if($username && $password){ $preLoginData = $this->curlRequest('http://login.sina.com.cn/sso/prelogin.php?entry=account&callback=sinaSSOController.preloginCallBack&su='.base64_encode($username).'&client=ssologin.js(v1.3.20)','',$cookieFile); preg_match('/sinaSSOController.preloginCallBack\((.*)\)/',$preLoginData,$preArr); $jsonArr = json_decode($preArr[1],true); if(is_array($jsonArr)){ $postArr = array( 'entry' => 'weibo', 'gateway' => 1, 'from' => '', 'savestate' => 7, 'useticket' => 1, 'ssosimplelogin' => 1, 'su' => base64_encode(urlencode($username)), 'service' => 'miniblog', 'servertime' => $jsonArr['servertime'], 'nonce' => $jsonArr['nonce'], 'pwencode' => 'wsse', 'sp' => sha1(sha1(sha1($password)).$jsonArr['servertime'].$jsonArr['nonce']), 'encoding' => 'UTF-8', 'url' => 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'returntype' => 'META' ); $loginData = $this->curlRequest('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.20)',$postArr,$cookieFile); if($loginData){ $matchs = array(); if($style == '1'){ preg_match('/replace\([\'|\"](.*?)[\'|\"]\)/',$loginData,$matchs); } if($style == '2'){ preg_match("/replace\(\"(.*?)\"\)/",$loginData,$matchs); } $loginResult = $this->curlRequest($matchs[1],'',$cookieFile); $loginResultArr = array(); preg_match('/feedBackUrlCallBack\((.*?)\)/',$loginResult,$loginResultArr); if(!empty($loginResultArr[1])){ $userInfo = json_decode($loginResultArr[1]); //print_r($userInfo); if($userInfo->result){ echo "login success \n"; } }else{ //echo "login false \n"; } }else{ //echo "Login sina fail \n"; } }else{ //echo $preLoginData."\n"; } }else{ //echo "Param error. \n"; } } public function getCookie($username,$password){ $this->login($username,$password); $filename = $this->cookie; $content = file_get_contents($filename); return $content; } } $obj = new Weibo(); $obj->getCookie($username,$password); ?>登錄成功會顯示login success