проблемы с авторизацией при Curl
Никогда плотно не работал с cURL. Пытаюсь авторизоваться через Curl, не получается. В логах, которые в cookies.txt везде возвращаются false.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
$login = 'login'; //Логин
$passwd = 'password'; //Пароль
$user_cookie_file = 'cookies.txt'; //Полный путь до файла, где будем хранить куки
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://site/login/");//Куда идём
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//Возвращаем строку
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");//Юзер агент
curl_setopt($ch,CURLOPT_REFERER,"");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//Автоматом идём по редиректам
curl_setopt($ch, CURLOPT_HEADER, array("Content-Type: application/x-www-form-urlencoded; charset=utf-8")); //Хеадер
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Куки раз
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Куки два
curl_setopt($ch, CURLOPT_AUTOREFERER,1);//Автоматическое выставление рефа, иногда косячит
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//В большенстве случаев помогает, если используется https
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//В большенстве случаев помогает, если используется https
$html = curl_exec($ch);
curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос
curl_setopt($ch, CURLOPT_POSTFIELDS,"login=$login&password=$passwd");//Что отправляем
curl_setopt($ch, CURLOPT_URL,'http://site/login/');//Куда отправляем
curl_setopt($ch,CURLOPT_REFERER,"http://site/login/");//Откуда пришли
$html = curl_exec($ch);
//далее идём на нужную нам страницу
curl_setopt($ch, CURLOPT_URL,'http://site/profile/id11289/');
$html = curl_exec($ch);
print $html;
$html должна возвращать страницу с авторизацией, но возвращает без авторизации, это собственно уже понятно.
Форма на сайте для авторизации:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .html4strict.geshi_code {font-family:monospace;} .html4strict.geshi_code .imp {font-weight: bold; color: red;} .html4strict.geshi_code .kw2 {color: #000000; font-weight: bold;} .html4strict.geshi_code .kw3 {color: #000066;} .html4strict.geshi_code .es0 {color: #000099; font-weight: bold;} .html4strict.geshi_code .br0 {color: #66cc66;} .html4strict.geshi_code .sy0 {color: #66cc66;} .html4strict.geshi_code .st0 {color: #ff0000;} .html4strict.geshi_code .nu0 {color: #cc66cc;} .html4strict.geshi_code .sc-1 {color: #808080; font-style: italic;} .html4strict.geshi_code .sc0 {color: #00bbdd;} .html4strict.geshi_code .sc1 {color: #ddbb00;} .html4strict.geshi_code .sc2 {color: #009900;} .html4strict.geshi_code span.xtra { display:block; }
<form action="http://site/login/" method="post">
<input type="hidden" name="submit_login">
<label for="login-input">E-mail:
<input type="text" class="input-text" name="login" tabindex="1" id="login-input">
</label>
<label for="password-input">Пароль:
<input type="password" name="password" class="input-text" tabindex="2" id="password-input">
</label>
<label class="remember">
<input type="checkbox" name="remember" checked tabindex="3"> - Запомнить меня
</label>
<button type="submit" class="but">
Войти
</button>
</form>
Получившийся хедер:
HTTP/1.1 200 OK Server: nginx Date: Thu, 12 Jul 2012 09:03:58 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.6-13 Set-Cookie: visitor_id=36f0761b99d40a0df4f334e4d72365d1; expires=Fri, 12-Jul-2013 09:03:58 GMT; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: LANG_CURRENT=deleted; expires=Wed, 13-Jul-2011 09:03:57 GMT; path=/
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
$login = 'login'; //Логин
$passwd = 'password'; //Пароль
$user_cookie_file = 'cookies.txt'; //Полный путь до файла, где будем хранить куки
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://site/login/");//Куда идём
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//Возвращаем строку
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");//Юзер агент
curl_setopt($ch,CURLOPT_REFERER,"");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//Автоматом идём по редиректам
curl_setopt($ch, CURLOPT_HEADER, array("Content-Type: application/x-www-form-urlencoded; charset=utf-8")); //Хеадер
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Куки раз
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Куки два
curl_setopt($ch, CURLOPT_AUTOREFERER,1);//Автоматическое выставление рефа, иногда косячит
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//В большенстве случаев помогает, если используется https
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//В большенстве случаев помогает, если используется https
$html = curl_exec($ch);
curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос
curl_setopt($ch, CURLOPT_POSTFIELDS,"login=$login&password=$passwd");//Что отправляем
curl_setopt($ch, CURLOPT_URL,'http://site/login/');//Куда отправляем
curl_setopt($ch,CURLOPT_REFERER,"http://site/login/");//Откуда пришли
$html = curl_exec($ch);
//далее идём на нужную нам страницу
curl_setopt($ch, CURLOPT_URL,'http://site/profile/id11289/');
$html = curl_exec($ch);
print $html;
$html должна возвращать страницу с авторизацией, но возвращает без авторизации, это собственно уже понятно.
Форма на сайте для авторизации:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .html4strict.geshi_code {font-family:monospace;} .html4strict.geshi_code .imp {font-weight: bold; color: red;} .html4strict.geshi_code .kw2 {color: #000000; font-weight: bold;} .html4strict.geshi_code .kw3 {color: #000066;} .html4strict.geshi_code .es0 {color: #000099; font-weight: bold;} .html4strict.geshi_code .br0 {color: #66cc66;} .html4strict.geshi_code .sy0 {color: #66cc66;} .html4strict.geshi_code .st0 {color: #ff0000;} .html4strict.geshi_code .nu0 {color: #cc66cc;} .html4strict.geshi_code .sc-1 {color: #808080; font-style: italic;} .html4strict.geshi_code .sc0 {color: #00bbdd;} .html4strict.geshi_code .sc1 {color: #ddbb00;} .html4strict.geshi_code .sc2 {color: #009900;} .html4strict.geshi_code span.xtra { display:block; }
<form action="http://site/login/" method="post">
<input type="hidden" name="submit_login">
<label for="login-input">E-mail:
<input type="text" class="input-text" name="login" tabindex="1" id="login-input">
</label>
<label for="password-input">Пароль:
<input type="password" name="password" class="input-text" tabindex="2" id="password-input">
</label>
<label class="remember">
<input type="checkbox" name="remember" checked tabindex="3"> - Запомнить меня
</label>
<button type="submit" class="but">
Войти
</button>
</form>
Получившийся хедер:
HTTP/1.1 200 OK Server: nginx Date: Thu, 12 Jul 2012 09:03:58 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.6-13 Set-Cookie: visitor_id=36f0761b99d40a0df4f334e4d72365d1; expires=Fri, 12-Jul-2013 09:03:58 GMT; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: LANG_CURRENT=deleted; expires=Wed, 13-Jul-2011 09:03:57 GMT; path=/