필자가 작성한 PHP 코드로 Yahoo에 로그인하는 데 문제가 있습니다. 코드는 일찍 작동하지만 어떤 이유로 작동을 멈췄습니다. 그것은 항상 내 야후 사용자 이름과 함께 헤더에 Hi Sudhir
처럼 상단에있는 내 사용자 이름과 함께 야후 로그인 페이지를 표시하지만 암호 필드와 로그인 버튼을 다시 표시하여 Please Verify your password
을 표시합니다.PHP에서 cURL을 사용하여 Yahoo에 로그인하는 데 문제가 있습니다
새로운 양식 작업 https://login.yahoo.com/config/login_verify2?
을 다시 한 번 요청을 다시 보내려고했지만 동일한 페이지를 계속 표시합니다. 다음은 내 야후 로그인 코드입니다.
무엇이 잘못 되었는가를 제안하거나 뭔가를 놓치고 있습니까?
<?php
$yahooCalUrl = "http://calendar.yahoo.com";
$ch = curl_init($yahooCalUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies_new.txt");
//curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies_new.txt");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$resCalUrl = curl_exec($ch);
//echo $resCalUrl;
$loginUrl = "https://login.yahoo.com/config/login?";
//get the hidden values
$searchStr = "/name=\".u\" value=\"(.*?)\"/";
preg_match($searchStr, $resCalUrl, $matches);
$u = $matches[1];
$searchStr1 = "/name=\".challenge\" value=\"(.*?)\"/";
preg_match($searchStr1, $resCalUrl, $matches1);
$challenge = $matches1[1];
$searchStr2 = "/name=\".pd\" value=\"(.*?)\"/";
preg_match($searchStr2, $resCalUrl, $matches2);
$pd = $matches2[1];
$username = "my_yahoo_username";
$password = "my_yahoo_password";
//$mdPassword = md5($password);
//$finalPass = $mdPassword . $challenge;
//$hash = md5($finalPass);
//$finalHash = urlencode($hash);
$done = urlencode("http://calendar.yahoo.com");
$postFields = ".tries=1&.src=fpctx&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=".$u."&.v=0&.challenge=".$challenge."&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.chkP=Y&.done=http%3A%2F%2Fwww.yahoo.com%2F&.pd=fpctx_ver%3D0%26c%3D%26ivt%3D%26sg%3D&pad=3&aad=3&login=".$username."&passwd=".$password."&.save=&passwd_raw=";
//$postFields = ".tries=1&.src=&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=".$u."&.v=0&.challenge=".$challenge."&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&.pd=".$pd."&pad=6&aad=6&.persistent=&.save=1&login=".$username."&passwd=".$password."&.done=".$done;
curl_setopt($ch, curlOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_REFERER, $loginUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies_new.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies_new.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$finalLoggedIn = curl_exec($ch);
echo $finalLoggedIn;
?>
야후의 동적 채널 값을 내 비밀번호와 조합하여 사용해 보았지만 그렇게하지 못했습니다.
아마 바보 같은 질문을 원하지만, 여전히 "정상"방식으로 로그인 할 수
done=http://calendar.yahoo.com
에 또는 어디? 또한 로그온 할 때 어떤 헤더가 전송되는지 확인하십시오. 아마도 뭔가가 그들의 형태로 바뀌었을 것입니다! – ChrisH
위의 코드는 로컬 서버에서 제대로 작동하지만 라이브 서버에 업로드하면 전혀 작동하지 않고 항상 로그인 페이지를 계속 표시합니다. 나는 살아있는 리눅스 서버를 가지고있다. 무슨 문제가 될 수 있니 ..? –
을 제안하십시오. 라이브와 로컬 모두 동일한 PHP.ini 설정을 갖고 있는지 확인하십시오. 'ini_set ('display_errors', 'on') 오류를 모두 표시했는지 확인하십시오. error_reporting (E_ALL); ' – ChrisH