/** * CURL request * @ Param String $ url request address * @ Param Array $ data request data */ Function curlRequest ($ url, $ data = '', $ cookieFile = ''){ $ Ch = curl_init (); $ Option = array ( CURLOPT_URL => $ url, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, ); If ($ cookieFile ){ $ Option [CURLOPT_COOKIEJAR] = $ cookieFile; $ Option [CURLOPT_COOKIEFILE] = $ cookieFile; // $ Option [CURLOPT_COOKIESESSION] = true; // $ Option [CURLOPT_COOKIE] = 'prov = 42; city = 1 '; } If ($ data ){ $ Option [CURLOPT_POST] = 1; $ Option [CURLOPT_POSTFIELDS] = $ data; } Curl_setopt_array ($ ch, $ option ); $ Response = curl_exec ($ ch ); If (curl_errno ($ ch)> 0 ){ Throw_exception ("curl error: $ url". curl_error ($ ch )); } Curl_close ($ ch ); Return $ response; } Function login ($ username, $ password ){ If ($ username & $ password ){ $ PreLoginData = curlRequest ('HTTP: // login.sina.com.cn/sso/prelogin.php? Entry = weibo & callback = sinaSSOController. preloginCallBack & su = '. base64_encode ($ username ). '& client = ssologin. js (v1.3.16) ', '', self: COOKIE_FILE ); 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 = curlRequest ('HTTP: // login.sina.com.cn/sso/login.php? Client = ssologin. js (v1.3.16) ', $ postArr, self: COOKIE_FILE ); If ($ loginData ){ $ Matchs = array (); Preg_match ('/replace ('(.*?) ')/', $ LoginData, $ matchs ); $ LoginResult = curlRequest ($ matchs [1], '', self: COOKIE_FILE ); $ LoginResultArr = array (); Preg_match ('/feedBackUrlCallBack ((.*?)) /', $ LoginResult, $ loginResultArr ); // $ UserInfo = json_decode ($ loginResultArr [1], true ); // Log: info (var_export ($ loginResultArr [1]); } Else { Throw_exception ('login sina fail .'); } } Else { Throw_exception ($ preLoginData ); } } Else { Throw_exception ('Param error .'); } } |