Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу авторизироваться посредствам CURL [POST]

14K
31 января 2008 года
Progr\.
72 / / 15.10.2007
Пытаюсь авторизироваться на одном сайта (адрес не могу сказать), и получить его куки, для дальнейшего использования их.
Я делаю так:

Код:
$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%


Куки приходят, даже если такой пользователь не зарегистрирован (не знаю почему так...), проверить правильность полученой куки могу только при дальнейшей работе с ними. И получается, что когдя я захожу через броузер и вхожу через него, то всё, что мне нужно получить видно (поля на странице только для авторизованых), а когда работаю с этим скриптом, то их не вижу (потом echo'ю результат другой функции).

Если в самом скрипте не вызывать эти функции, а просто в переменную $cookie записать куки из броузера, то всё в дальнейшем отлично работает!

По-моему, у меня здесь ошибка при установке curl опции:
Цитата:
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);


Я думаю, что дело в том, что $post предварительно нужно как-то кодировать, чтоб передать в правильном формате. Я как раз не знаю как закодировать это и не знаю в какой формат кодировать :(

Подскажите, пожалуйста, буду очень благодарен! А то не удобно всегда с броузера копировать куки.

P.S.: осложняет ещё то, что сайт сделан на фрэймовой структуре...

833
31 января 2008 года
leich
135 / / 27.09.2006
Не понятно что вы пытаетесь делать с куками. Там все элементарно: сервер вам присылает страницу авторизации - вы считываете оттуда куку и всегда вставляете ее во все последующие запросы. POST записан в правильной форме. Но Content-Type: text/html должен быть при POST запросе Content-Type: application/x-form-urlencoded - хотя я так не помню точно как это там пишется.
Скорее всего дело не в посте, а в том, что вы пытаетесь выполнить пост не сделав гета)
14K
31 января 2008 года
Progr\.
72 / / 15.10.2007
Цитата:
Не понятно что вы пытаетесь делать с куками. Там все элементарно: сервер вам присылает страницу авторизации - вы считываете оттуда куку и всегда вставляете ее во все последующие запросы.


Именно это я и делаю :)

Цитата:
Но Content-Type: text/html должен быть при POST запросе Content-Type: application/x-form-urlencoded - хотя я так не помню точно как это там пишется.


Не исключено, но, по-моему, сервер при авторизации просто редиректит на ту же самую страницу (фрейм), от куда посылалась авторизация.

Цитата:
Скорее всего дело не в посте, а в том, что вы пытаетесь выполнить пост не сделав гета)


Хм.. А какой же там get? Давайте я сюда содержимое фрэйма выложу?

14K
31 января 2008 года
Progr\.
72 / / 15.10.2007
Вот код фрейма, где стоит авторизация
[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]
833
01 февраля 2008 года
leich
135 / / 27.09.2006
Cкачайте сниффер и посмотрите какой у вас там идет траффик. Я обычно юзал IEWatch - плагин к IE. Мне всетки кажется надо сначала делать GET запрос к странице авторизации, брать оттуда все куки и потом уже делать пост запрос на авторизацию - как в браузере.
 
Код:
$cookie = $set[1][0]; // ASPSESSIONIDCCDRACCB=GLKDLKHAMBBINIIKIIKMPGGK
$cookie = 'LID=EN&'.$cookie.'&t=a'; // t=a здесь нужно 100%

А этот код вы откуда взяли? В запросе так идет?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог