2011-02-04 23 views
3
<?php 
$email = ""; 
$password = ""; 
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 


//curl get 
function curl_get($url, $cookiefile) { 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $data = curl_exec($curl); 
    curl_close($curl); 
    return $data; 
} 

//curl post 

function curl_post($url, $cookiefile, $post) { 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $data = curl_exec($curl); 
    curl_close($curl); 
    return $data; 
} 

//cookie file 

$cookiefile = "cookie.txt"; 


//get url to grab GALX & dsh to login 
$data = curl_get("https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&hl=en_US&ltmpl=sso", $cookiefile); 


preg_match('/name="GALX"\s*value="(.*?)"/', $data, $galx); 

preg_match('/name="dsh" id="dsh"\s*value="(.*?)"/', $data, $dsh); 


//login 
$data = curl_post("https://www.google.com/accounts/ServiceLoginAuth", $cookiefile, "ltmpl=sso&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&service=youtube&uilel=3&dsh=$dsh[1]&ltmpl=sso&hl=en_US&ltmpl=sso&timeStmp=&secTok=&GALX=$galx[1]&Email=$email&Passwd=$password&PersistentCookie=yes&rmShown=1&signIn=Sign+in&asts="); 

//auth url 
$data = curl_get("https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&hl=en_US&service=youtube&ltmpl=sso&chtml=LoginDoneHtml", $cookiefile); 


// youtube 
$data = curl_get("http://www.youtube.com/", $cookiefile); 
print $data; 

?> 

ここで私のコードはyoutube.comの内容をプリントアウトすると、私はログインしていないことを示しています。誰も私がここで間違っているのを知っていますか? Googleにログインするには、GALXとdshの値を取得する必要があります。そうしています。これはそのような頭痛です!php cURLの問題

+0

を以前今夜この質問をしませんでした:あなたのコードを説明するために書き換えの自由を取りましたか? –

答えて

4

私はyoutube.com の内容をプリントアウトしたときにここに私のコードでは、それは私がログインしていないよ示し、最後の行に、です...

Googleは権利である:)あなたが見る、あなたcurl_init()は何度も繰り返します。つまり、curl_get関数とcurl_post関数の呼び出しごとに新しいセッションを開始します。一度だけinitを実行し、取得するリソースを渡す必要があります。それはあなたの問題を解決するはずです。

EDIT:

<?php 
$email = ""; 
$password = ""; 



//curl get 
function curl_get($curl, $url, $cookiefile) { 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $data = curl_exec($curl); 
    return $data; 
} 

//curl post 

function curl_post($curl, $url, $cookiefile, $post) { 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $data = curl_exec($curl); 
    return $data; 
} 

//cookie file 
$cookiefile = "cookie.txt"; 

$curl = curl_init(); 

//get url to grab GALX & dsh to login 
$data = curl_get($curl, "https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&hl=en_US&ltmpl=sso", $cookiefile); 


preg_match('/name="GALX"\s*value="(.*?)"/', $data, $galx); 

preg_match('/name="dsh" id="dsh"\s*value="(.*?)"/', $data, $dsh); 


//login 
$data = curl_post($curl, "https://www.google.com/accounts/ServiceLoginAuth", $cookiefile, "ltmpl=sso&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&service=youtube&uilel=3&dsh=$dsh[1]&ltmpl=sso&hl=en_US&ltmpl=sso&timeStmp=&secTok=&GALX=$galx[1]&Email=$email&Passwd=$password&PersistentCookie=yes&rmShown=1&signIn=Sign+in&asts="); 

//auth url 
$data = curl_get($curl, "https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&hl=en_US&service=youtube&ltmpl=sso&chtml=LoginDoneHtml", $cookiefile); 


// youtube 
$data = curl_get($curl, "http://www.youtube.com/", $cookiefile); 
print $data; 
+0

お返事ありがとう!私はコードを実行しようとしたが、私は続ける 警告:curl_setopt():2は、各行で有効なcURLハンドルリソースではない – joey

+0

カールハンドルが各関数で閉じられているので、最後まで閉じないでください。 –

+0

@joey申し訳ありませんが、あなたの応答に気づいたことはありませんが、Dominic Watsonは正しいです。 cURLセッションはまだ関数内で閉じられています。私は自分の答えを編集しました。 ( - : –