这里只给出代码: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