$cookie = $set[1][0]; // ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK
$cookie = 'LID=EN&'.$cookie.'&t=a'; // t=a здесь нужно 100%
Не могу авторизироваться посредствам CURL [POST]
Я делаю так:
Код:
$url = 'http://www/'; // урл адрес сайта
$login = '111'; // логин
$pwd = '222'; // пароль
function login_site() {
global $login, $pwd, $url;
$site = $url.'auth/default.asp'; // страница авторизации
$post = 'Login='.$login.'&Password='.$pwd; // .'&'
$curl = curl_init($site);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, FALSE);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
function get_cookies ($header) {
/* То, что приходит в $header:
HTTP/1.1 200 OK
Date: Wed, 30 Jan 2008 23:01:01 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 1730
Content-Type: text/html
Set-Cookie: LID=EN; expires=Tue, 26-Oct-2010 21:00:00 GMT; path=/
Set-Cookie: ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK; path=/
Cache-control: private
*/
$search = array(" ", " ", " ", "\n", "\r");
$replace = array('', '', '', ' ', ' ');
$header = str_replace($search, $replace, $header);
$setcookies = array();
preg_match_all('/Set-Cookie\:\s(ASPSESSION([^=]*)([^\;\s]*))/', $header, $setcookies);
return $setcookies;
}
$login = login_site();
$set = get_cookies($login);
$cookie = $set[1][0]; // ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK
$cookie = 'LID=EN&'.$cookie.'&t=a'; // t=a здесь нужно 100%
$login = '111'; // логин
$pwd = '222'; // пароль
function login_site() {
global $login, $pwd, $url;
$site = $url.'auth/default.asp'; // страница авторизации
$post = 'Login='.$login.'&Password='.$pwd; // .'&'
$curl = curl_init($site);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, FALSE);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
function get_cookies ($header) {
/* То, что приходит в $header:
HTTP/1.1 200 OK
Date: Wed, 30 Jan 2008 23:01:01 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 1730
Content-Type: text/html
Set-Cookie: LID=EN; expires=Tue, 26-Oct-2010 21:00:00 GMT; path=/
Set-Cookie: ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK; path=/
Cache-control: private
*/
$search = array(" ", " ", " ", "\n", "\r");
$replace = array('', '', '', ' ', ' ');
$header = str_replace($search, $replace, $header);
$setcookies = array();
preg_match_all('/Set-Cookie\:\s(ASPSESSION([^=]*)([^\;\s]*))/', $header, $setcookies);
return $setcookies;
}
$login = login_site();
$set = get_cookies($login);
$cookie = $set[1][0]; // ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK
$cookie = 'LID=EN&'.$cookie.'&t=a'; // t=a здесь нужно 100%
Куки приходят, даже если такой пользователь не зарегистрирован (не знаю почему так...), проверить правильность полученой куки могу только при дальнейшей работе с ними. И получается, что когдя я захожу через броузер и вхожу через него, то всё, что мне нужно получить видно (поля на странице только для авторизованых), а когда работаю с этим скриптом, то их не вижу (потом echo'ю результат другой функции).
Если в самом скрипте не вызывать эти функции, а просто в переменную $cookie записать куки из броузера, то всё в дальнейшем отлично работает!
По-моему, у меня здесь ошибка при установке curl опции:
Цитата:
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
Я думаю, что дело в том, что $post предварительно нужно как-то кодировать, чтоб передать в правильном формате. Я как раз не знаю как закодировать это и не знаю в какой формат кодировать :(
Подскажите, пожалуйста, буду очень благодарен! А то не удобно всегда с броузера копировать куки.
P.S.: осложняет ещё то, что сайт сделан на фрэймовой структуре...
Скорее всего дело не в посте, а в том, что вы пытаетесь выполнить пост не сделав гета)
Цитата:
Не понятно что вы пытаетесь делать с куками. Там все элементарно: сервер вам присылает страницу авторизации - вы считываете оттуда куку и всегда вставляете ее во все последующие запросы.
Именно это я и делаю :)
Цитата:
Но Content-Type: text/html должен быть при POST запросе Content-Type: application/x-form-urlencoded - хотя я так не помню точно как это там пишется.
Не исключено, но, по-моему, сервер при авторизации просто редиректит на ту же самую страницу (фрейм), от куда посылалась авторизация.
Цитата:
Скорее всего дело не в посте, а в том, что вы пытаетесь выполнить пост не сделав гета)
Хм.. А какой же там get? Давайте я сюда содержимое фрэйма выложу?
[HTML]
<HTML>
<HEAD>
<TITLE>....</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<link rel=stylesheet type="text/css" href="../css/style.css">
<script language=javascript src=../js/script.js></script>
<script>
if(!top.window.frames.left)
top.window.location.replace('../');
</script>
<body>
<form method="post" action="default.asp"><table cellpadding="0" cellspacing="0"><tr><td background="../img/auth1.jpg" width="90px" align="right">
<table cellpadding="1" cellspacing="1">
<tr>
<td><input class="it1" name="Login" value="Login" onfocus="if(this.value=='Login')this.value=''" onblur="if(this.value=='') this.value='Login'"></td>
</tr>
<tr>
<td><input class="it1" type="Password" name="Pass" value="Pass" onfocus="if(this.value=='Pass')this.value=''" onblur="if(this.value=='') this.value='Pass'"></td>
</tr>
</table>
</td>
<td><img src="../img/auth2.jpg" onclick="document.forms[0].submit();" style="cursor: hand"></td>
<td><img src="../img/auth3.jpg"></td>
</tr></table>
<br><input type="Submit">
</form>
</body>
</html>
[/HTML]
Код:
А этот код вы откуда взяли? В запросе так идет?