利用php curl实现程序登录新浪微博代码 |
时间:2015-01-23 来源:西部数据 作者:西部数据 |
|
-
-
-
-
-
- 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;
-
-
- }
- 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);
-
-
- }else{
- throw_exception('Login sina fail.');
- }
- }else{
- throw_exception($preLoginData);
- }
- }else{
- throw_exception('Param error.');
- }
- }
|
|
|
|