Эмуляция авторизации

Статус
В этой теме нельзя размещать новые ответы.
Много букв, из того что бегло заметил
PHP:
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
Путь к файлу 'cookie.txt' советуется давать полный. Вот код с php.net насчет этого случая с виндой (ты с винды/денвера запускаешь?:(
PHP:
<?php

if ($cookies != '')
    {
    if (substr(PHP_OS, 0, 3) == 'WIN')
        {$cookies = str_replace('\\','/', getcwd().'/'.$cookies);}
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
    }

?>

Ты $referer использовал без того чтоб подставить в него заранее значение? Получается посылалось пустое поле.. ну, неважно.

Насчет HttpAnalyzer, скачай и сравни что посылает браузер и что посылает твой скрипт, если выложишь запросы и ответы, больше шансов что смогут помочь, запросы это важная часть дебага. т.е. не только запросы бразуера, а также твоего скрипта для сравнения.
 
PHP:
<?

$login = "";
$pwd = "";

$header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png;q=0.5" ;
$header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1";
$header[] = "Accept_encoding: identity";
$header[] = "Accept_language: en-us,en;q=0.5";
$header[] = "Connection: close";
$header[] = "Cache-Control: no-store, no-cache, must-revalidate";
$header[] = "Keep_alive: 300";
$header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT";

$url = "http://mail.i.ua/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header);
$result = curl_exec($ch);

preg_match('|name="scode" value="(.*)"|',$result,$out);
$scode = $out[1];

preg_match('|name="_url" value="(.*)"|',$result,$out);
$url = $out[1];

$cpass = md5($pwd.$scode);
//$rand = "0.09917490026887343";
$rand = "0.09917490017883343";

$url="http://i.ua/login.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "_subm=lform&scode={$scode}&_url={$url}&cpass={$cpass}&_rand=$rand&login={$login}&pass=");
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header);
echo $result = curl_exec($ch);

/*
Name	Value
_subm	lform
scode	cd20e577b4cf49288b5bfac60c3e8b1a
_url	http://mbox.i.ua/?_rand=1257293127
cpass	8f014888d72afd46bd0d7af925a030e1
_rand	0.13859508848635438
login	preved
pass	 
*/

PS: форум глючит после символов */* в коде

там хорошо бы
$header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ;
ну это так.. это не обязательно
 
potuga, скасибо Ваш код работает.
Только после отработки скрипт не заходит в веб интерфейс почты, а пишет:

Цифры постоянно меняются.
P.S.
Суть скрипта, чтобы он отправлял письма через веб-интерфейс.
Через smtp подключиться нельзя - только платно, поэтому приходится извращаться.
 
все правильно, сервис кидает тебя на страничку с которой ты должен сам получить урл и перейти по нему
 
Да, но почему происходит зацикливание?
Он постоянно сообщение с редиректингом обновляет, пока не остановишь работу скрипта.
 
надо разбирается, почему с кодм potuga нельзя залогинется, обрати внимание, что тебя снова и снова кидает на страница логина, когда кусок кода, приведеный тобой прекрасно возвращает страницу с редиректов в почтовый ящик, все что необходимо.
PHP:
$url="http://i.ua/login.php";
	$login = "";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_VERBOSE, 1);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "_subm=lform&scode=" . md5(time()) . "&_url=http%3A%2F%2Fmbox.i.ua%2F%3F_rand%3D" . time() . "&cpass=&_rand=" . rand() . "&login=" . $login . "&pass=" . $pass . "&domn=i.ua");
	curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
	echo $result = curl_exec($ch);
 
вообще-то это ссылка для перехода в почтовый ящик.
если в опции курла добавить еще
PHP:
	curl_setopt($ch, CURLOPT_HEADER, 1); 
	curl_setopt($ch, CURLOPT_NOBODY, 0);
тогда можно видеть и сам заголовок, в котором проставляются куки.
так же не забывайте использовать и CURLOPT_COOKIEFILE, чтобы было откуда куки для дальнейшей работы читать.
 
Щёлкаю на эту ссылочку, всё равно не пускает.
В файле cookie.txt пишет 2 раза FALSE
 
вы пытаетесь авторизироваться через скрипт, куки хранятся в отдельном файле, а вы через браузер пытаетесь зйти по ссылке, которая должна у вас появится только авторизации через браузер

смотрим код ниже, подствлвяем свои данные
PHP:
	$url="http://i.ua/login.php";
    $login = "";
	$pass = "";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
	curl_setopt($ch, CURLOPT_HEADER, 1); 
	curl_setopt($ch, CURLOPT_NOBODY, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "_subm=lform&scode=" . md5(time()) . "&_url=http%3A%2F%2Fmbox.i.ua%2F%3F_rand%3D" . time() . "&cpass=&_rand=" . rand() . "&login=" . $login . "&pass=" . $pass . "&domn=i.ua");
    curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE,'cookie.txt');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
    $result = curl_exec($ch);
	
	
	if (preg_match('/<a[^>]+href=["\'](http:\/\/mbox\.i\.ua\/\?_rand=\d+)["\']>/', $result, $out)) {
		curl_setopt($ch, CURLOPT_POST, 0);
		curl_setopt($ch, CURLOPT_URL, $out[1]);
		echo $result = curl_exec($ch);
	}

какой текст выведет в конечном итоге?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху