首页 > php开发 > 利用php curl实现程序登录新浪微博代码

利用php curl实现程序登录新浪微博代码

<?php
/**  
 * CURL请求
 * @param String $url 请求地址
 * @param Array $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.');
    }
}
?>


本文地址:http://www.phprm.com/develop/fs4110.html

转载随意,但请附上文章地址:-)

标签:php curl 程序登录 新浪微博

相关文章

发表留言