#php #http #authentication #curl
#php #http #аутентификация #curl
Вопрос:
Я новичок в curl и перепробовал много руководств. Последняя попытка, которую я предпринял, заключалась в использовании следующего кода:
<?php
// INIT CURL
$url="";
function login($url) {
$result = "";
$cookiePath = "/tmp/cookies.txt";
// Initialize the page
$page = curl_init();
// Set some options
curl_setopt($page, CURLOPT_COOKIESESSION, true);
curl_setopt($page, CURLOPT_REFERER, 'http://www.justanswer.com/login.aspx');
curl_setopt($page, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($page, CURLOPT_FRESH_CONNECT, true);
curl_setopt($page, CURLOPT_HEADER, true);
curl_setopt($page, CURLOPT_POST, true);
curl_setopt($page, CURLOPT_RETURNTRANSFER, true);
curl_setopt($page, CURLOPT_CONNECTTIMEOUT, 30);
$pattern = "#Set-Cookie: (.*?; path=.*?;.*?)n#";
preg_match_all($pattern, $result, $matches);
array_shift($matches);
$cookie = implode("n", $matches[0]);
// Use the parsed cookies with the next request
curl_setopt($page, CURLOPT_COOKIE, $cookie);
curl_setopt($page, CURLOPT_COOKIESESSION, true);
curl_setopt($page, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($page, CURLOPT_FRESH_CONNECT, true);
curl_setopt($page, CURLOPT_HEADER, false);
curl_setopt($page, CURLOPT_POST, false);
// Set the URL
curl_setopt($page, CURLOPT_URL, $url);
// Set the location of and send the cookies
curl_setopt($page, CURLOPT_COOKIEJAR, $cookiePath);
curl_setopt($page, CURLOPT_COOKIEFILE, $cookiePath);
// Send out POST data
curl_setopt($page, CURLOPT_POST, 1);
curl_setopt($page, CURLOPT_POSTFIELDS, "__EVENTTARGET=amp;__EVENTARGUMENT=amp;__SSVIEWSTATE=18amp;__VIEWSTATE=amp;email=****amp;sign_in_type=returningamp;username=amp;password=****amp;remember=trueamp;ctl00$BodyContent$btnLogin.x=99amp;ctl00$BodyContent$btnLogin.y=17amp;SC_SID=346833306amp;SC_GUID=d157264a-24e2-47c0-b545-259ea5298e19amp;JS_BOOL=trueamp;__EVENTVALIDATION=/wEWAwL+raDpAgKUnpuXBgKp/+SDCG4uM7n2SYrFbuk10/LkC64jclbvH6dXKmxM06VHN92G");
// Get the page
return $page;
}
$page = login($url);
// Go to the page and log in
curl_exec($page);
// Change the URL to the main page to check to see if the user is logged in
curl_setopt($page, CURLOPT_URL, "");
// Print the output
print curl_exec($page);
?>
Пожалуйста, кто-нибудь может объяснить, что я делаю не так, я повторил тот же POST-запрос, используя расширение LIVE HTTP headers в firefox, и это было успешно.
Страница входа находится по адресу http://www.justanswer.com/login.aspx
Пожалуйста, предложите
TIA
Комментарии:
1. В чем именно заключается ошибка, с которой вы столкнулись в коде?
2. Есть ли еще проблема с этим кодом?
Ответ №1:
Попробуйте обернуть переменные формы в виде массива, например:
$postVars = array("__EVENTTARGET" => "",
"__EVENTARGUMENT" => "",
"__SSVIEWSTATE" => "18",
"__VIEWSTATE" => "",
"email" => "****",
"sign_in_type" => "returning"
"foo" => "bar");