Похоже, никто не ответил на это.И я знаю, это раздражающая проблема.
Я вижу, где вы устанавливаете имя файла cookie / jar ... но не открываете файл для чтения / записи.Решение было больше, чем просто использовать fopen()
в начале файла ...
$cookie_jar_file = "my_cookies_new.txt";
$fp = fopen($cookie_jar_file, "w");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar_file);
Также:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
Не забудьте закрыть открытый файл и удалить его приконец вашего сценария.
fclose($fp);
unlink($cookie_jar_file);
Надеюсь, это кому-нибудь поможет.Вот как я бы это сделал:
1: получите от Yahoo информацию, которая вам понадобится.
// *********************************************************************************************
// GET CHALLENGE
// *********************************************************************************************
$cs = curl_init();
curl_setopt($cs, CURLOPT_USERAGENT, $agent);
curl_setopt($cs, CURLOPT_REFERER, "http://m.google.com/");
curl_setopt($cs, CURLOPT_URL, "https://login.yahoo.com/config/login_verify2?");
// curl_setopt($cs, CURLOPT_POSTFIELDS, "login=".$id."&passwd=".$pass."&.src=&.tries=5&.bypass=&.partner=&.md5=&.hash=&.intl=us&.tries=1&.challenge=ydKtXwwZarNeRMeAufKa56.oJqaO&.u=dmvmk8p231bpr&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.v=0&.chkP=N&.last=&.done=http://m.yahoo.com/w/ygo-mail/");
curl_setopt($cs, CURLOPT_COOKIEJAR, $cookie_jar_file);
curl_setopt($cs, CURLOPT_COOKIEFILE, $cookie_jar_file);
curl_setopt($cs, CURLOPT_HEADER, 1);
//curl_setopt($cs, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($cs, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cs, CURLOPT_TIMEOUT, 30);
curl_setopt($cs, CURLOPT_CONNECTTIMEOUT,5);
// curl_setopt($cs, CURLOPT_HTTPPROXYTUNNEL, 1);
// curl_setopt($cs, CURLOPT_PROXY, $proxy);
curl_setopt($cs, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($cs, CURLOPT_SSL_VERIFYHOST, 2);
$y_login_page = curl_exec($cs);
//print $y_login_page;
curl_close($cs);
$proceed = true;
if(preg_match("/type=\"hidden\" name=\".challenge\" value=\"(.*?)\"/", $y_login_page, $challenge)){
print "";
print_r($challenge);
print"
"; напечатайте" FOUND CHALLENGE STRING
"; $ chal = $ challenge[1];} else {print "\ nNO CHALLENGE STRING"; $ continue = false;} if (preg_match ("/ type = \" hidden \ "name = \". U \ "value = \" (. *?) \ "/", $ y_login_page, $ array_u)) {print "
";
print_r($array_u);
print"
"; напечатать "FOUND .U STRING
"; $ u = $ array_u [1];} else {print "\ nNO U STRING"; $ continue = false;} if (preg_match (" / type = \ "hidden \" name = \ ". pd \" value = \ "(. *?) \" / ", $ y_login_page, $ array_pd)){print "
";
print_r($array_pd);
print"
"; печать "FOUND .PD STRING
"; $ pd = $ array_pd [1];} if (preg_match ("/ ts = (. *?) & /", $ y_login_page, $array_ts)) {print "
";
print_r($array_ts);
print"
"; напечатать "FOUND TIME STAMP STRING
"; $ xts = $ array_ts [1];}
Затем используйте информацию, которую вы только что собрали вместе с вашимИмя пользователя и пароль для входа в систему.
// *********************************************************************************************
// CURL SESSION #1: AUTHENTICATE THE USER ID ON YAHOO'S SERVER
// *********************************************************************************************
$cs = curl_init();
curl_setopt($cs, CURLOPT_USERAGENT, $agent);
curl_setopt($cs, CURLOPT_REFERER, "http://m.google.com/");
curl_setopt($cs, CURLOPT_URL, "http://login.yahoo.com/config/login?");//http://login.yahoo.com/config/login?
curl_setopt($cs, CURLOPT_POSTFIELDS, ".tries=1&.src=&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.lang=en-US&.bypass=&.partner=&.u=".$u."&.v=0&.challenge=".$chal."&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.chkP=Y&.done=http://calendar.yahoo.com&.pd=".$pd."&.ws=0&.cp=0&nr=0&pad=5&aad=5&login=".$id."&passwd=".$pass."&.persistent=y&.save=");
curl_setopt($cs, CURLOPT_COOKIEJAR, $cookie_jar_file);
curl_setopt($cs, CURLOPT_COOKIEFILE, $cookie_jar_file);
curl_setopt($cs, CURLOPT_HEADER, 1);
curl_setopt($cs, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cs, CURLOPT_TIMEOUT, 30);
curl_setopt($cs, CURLOPT_CONNECTTIMEOUT,5);
//curl_setopt($cs, CURLOPT_HTTPPROXYTUNNEL, 1);
//curl_setopt($cs, CURLOPT_PROXY, $proxy);
$y_login_page = curl_exec($cs);
print $y_login_page;
В PostFeilds есть поле с именем "done".
Установите это значение в done=http://calendar.yahoo.com
Или куда вы хотите перейтипосле входа в систему.