2012年7月24日 星期二

curl 登入 xuite (研究中...)

目前還是失敗的.. 還在研究為什麼= =

$url = "http://xuite.net/members/miniLogin.php?final=http://xuite.net";

$login_url = "https://member.xuite.net/HiReg/multiauthentication";
$uid = "uid";
$pw = "pw";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
$content = curl_exec($ch);
$start=strpos($content,"src")+5;
$end=strpos($content,"'",$start);

$url = substr($content,$start,$end-$start);
curl_setopt($ch, CURLOPT_URL, $url);
$content = curl_exec($ch);
curl_close ($ch); 
// 為了模擬登入時, post 的資料, 所以先取得這些資料
$version = find_input_value("version",$content);
$curl = find_input_value("curl",$content);
$siteid = find_input_value("siteid",$content);
$sessionid = find_input_value("sessionid",$content);
$channelurl = find_input_value("channelurl",$content);
$others = find_input_value("others",$content);
$checksum = find_input_value("checksum",$content);
$service_type = find_input_value("service_type",$content);
$cp_reg_info = find_input_value("cp_reg_info",$content);
$reg_url = find_input_value("reg_url",$content);
$finish_channelurl = find_input_value("finish_channelurl",$content);
$formtype = find_input_value("formtype",$content);
$sso = find_input_value("sso",$content);
$cssurl = find_input_value("cssurl",$content);

$post_data = array(
 "uid"=>$uid,
 "pw"=>$pw,
 "version"=>$version,
 "curl"=>$curl,
 "siteid"=>$siteid,
 "sessionid"=>$sessionid,
 "channelurl"=>$channelurl,
 "others"=>$others,
 "checksum"=>$checksum,
 "service_type"=>$service_type,
 "cp_reg_info"=>$cp_reg_info,
 "reg_url"=>$reg_url,
 "finish_channelurl"=>$finish_channelurl,
 "formtype"=>$formtype,
 "sso"=>$sso,
 "cssurl"=>$cssurl,
);
// var_dump($post_data);

// cURL($url, $header=NULL, $p=NULL)
// 對 login_url 發送剛剛記錄的資料 & 帳號密碼 (記錄cookie)
$a= cURL ($login_url,false,$post_data);
// 因為有使用剛剛記錄 cookie, 所以直接導回 xuite 即可
echo cURL("http://xuite.net", false, null);


function find_input_value($name,$content){
 $start = strpos($content, "name=\"$name");
 $start=strpos($content,"value",$start)+7; // +7 是因為 value=" 長度為7
 $end=strpos($content,"\"",$start);
 $value = substr($content,$start,$end-$start);
 return $value;
}

function cURL($url, $header=NULL, $p=NULL)
{
    $ch = curl_init();
 $cookie_file = './cookie.txt';
    curl_setopt($ch, CURLOPT_HEADER, $header);
    // curl_setopt($ch, CURLOPT_NOBODY, $header);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    // curl_setopt($ch, CURLOPT_COOKIE, $cookie);
 // 將 cookie 儲存
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
 // 使用這個 cookie
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $p);
    $result = curl_exec($ch);
    if ($result) {
        return $result;
    } else {
        return curl_error($ch);
    }
    curl_close($ch);
}

沒有留言: