php cURL问题
问题描述:
<?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<mpl=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]<mpl=sso&hl=en_US<mpl=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<mpl=sso&chtml=LoginDoneHtml", $cookiefile);
// youtube
$data = curl_get("http://www.youtube.com/", $cookiefile);
print $data;
?>
这是我的代码,在最后一行当我打印出youtube.com的内容时它显示我没有登录..任何人都知道我在做什么错在这里?要登录谷歌,你需要抓住GALX和dsh值,我这样做。这真是头疼!php cURL问题
答
这里是我的代码,在最后一行时,我打印出来我不是登录的youtube.com 它显示的内容..
谷歌是正确的:)你看,你curl_init(),这意味着每次调用curl_get和curl_post函数时都会启动新的会话。您应该只启动一次并传递您检索的资源。这应该可以解决你的问题。
编辑:花了重新编写代码来说明的自由:
<?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<mpl=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]<mpl=sso&hl=en_US<mpl=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<mpl=sso&chtml=LoginDoneHtml", $cookiefile);
// youtube
$data = curl_get($curl, "http://www.youtube.com/", $cookiefile);
print $data;
+0
嗨,感谢您的回复!我试图运行代码,我一直得到 警告:curl_setopt():2不是每行上的有效cURL句柄资源 – joey 2011-02-04 08:17:08
你没问这个问题今晚早些时候? – 2011-02-04 08:11:35