[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: отправка POST через сокеты, авторизация и дальше
Sharaw
Приветствую всех готовых разобраться и помочь! wink.gif

Задача: есть некий сайт, на котором нужно пройти авторизацию
для того чтобы в дальнейшем на некоторых страницах отображались email'ы пользователей.
Тоесть, неавторизированный пользователь видит вместо почтовых адресов и контактов *****.
Для это формируем POST запрос через сокеты, вносим всю нужную и ненужную инфу включая логин и пароль пользователя (он известен):


$out = "POST /authority.php HTTP/1.1\n";
$out .= "Host: www.avia-board.com\n";
$out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6\n";
$out .= "Accept: text/html,application/xhtml+xml,application/xml\n";
$out .= "Accept-Language: uk,ru;q=0.8,en-us;q=0.5,en;q=0.3\n";
$out .= "Accept-Encoding: gzip,deflate\n";
$out .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n";
$out .= "Keep-Alive: 115\n";
$out .= "Connection: keep-alive\n";
$out .= "Referer: http://www.avia-board.com/authority.php/ \n";
$out .= "Cookie: PHPSESSID=efb9ba30c1397105599d3b92824b339e...........\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";

Для ввода этих данных проанализировал сниффером HttpFox данные обмена.
Короче, сайт запрос принимает и выводит ответ:

HTTP/1.1 302 Found Date: Thu, 01 Jul 2010 13:51:19 GMT Server: Apache X-Powered-By: PHP/5.2.13 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: aviaboardname=ЛОГИН; expires=Sun, 11-Jul-2010 13:51:19 GMT; path=/ Set-Cookie: aviaboardpassword=ПАРОЛЬ; expires=Sun, 11-Jul-2010 13:51:19 GMT; path=/ Location: /index.php Content-Length: 0 Keep-Alive: timeout=5, max=32 Connection: Keep-Alive Content-Type: text/html

Тоесть все ОК, авторизация принята и теперь если обратиться дальше по тексту из этого скрипта к стhанице где должна быть email примерно так:

error_reporting(E_ALL);
$url="http://www.avia-board.com/board/view.php?id=1";
$data=file_get_contents($url);
echo(htmlspecialchars($data));

адрес почты показывает **** тоесть как для неавторизованного пользователя!!!
И собственно вопрос! как дальше сохранить эту авторизацию отправленную вначале в POST запросе чтобы открывать станицы из скрипта как авторизованный пользователь??? Или может там какой-то нюанс? Просто не пойму как это сделать...
В общем помогите - зашел в тупик blink.gif



Спустя 11 минут, 25 секунд (1.07.2010 - 17:15) tomash написал(а):
сессии вам помогут!

Спустя 33 минуты, 51 секунда (1.07.2010 - 17:49) Sharaw написал(а):
smile.gif У меня были мысли по поводу сессий. Я просто не могу в голове сложить как
прописать сессию для этой задачи... Если не трудно, хоть намекните где открыть сессию, что
там делать, когда закрыть, моцк затвердел ph34r.gif

Спустя 2 минуты, 22 секунды (1.07.2010 - 17:51) tomash написал(а):
после авторизации, если все гут стартуем сессию, кидаем юзеру куки! А дальше по ходу скрипты в которые нужно передавать данные везде стартуем сессию.

Спустя 26 минут, 6 секунд (1.07.2010 - 18:17) SlavaFr написал(а):
я в ответе видел Set-Cookie, т.е наверное они хотят чтоб ты посаженые кексы дальше показывал.
file_get_contetns конечно делает запрос на сайт, но не садит на прямую кексы, мало того делает редирект на index.php где ты кексы наверное опять предявить должен.
так, что тебе ответ нужен http://de.php.net/manual/en/function.get-headers.php
и контехт для file_get_contents


$opt = array(
'http'=>array(
'method'=>"GET",
'header'=>"Cookie: ххх=yyy\r\n"
)
);

$cont = stream_context_create($opt);
$file = file_get_contents(www.страница, false, $cont);

или ты вместо file_get_contents дальше fsockopen работай.

Спустя 6 минут, 32 секунды (1.07.2010 - 18:24) tomash написал(а):
Sharaw
Старик извини, не дочитал тему! сессии не нужны, тебе нужно открытую сессию подсунуть обратно серверу. Или кукисы.
попробуй как SlavaFr советует

Спустя 19 часов, 2 минуты, 58 секунд (2.07.2010 - 13:27) Денис Венецкий написал(а):
Делал авторизацию для одноклассников с переходом затем на страницу кто из друзей ONLINE. ваши так сказать "кексы" ставить пришлось там часто... но вот что отличительное я использовал CURL где можно в установке опций поставить показ заголовков сервера..... если что стучите в асю - 553860 , говорите сайт и что вам надо, сделаю(бесплатно) , но разумеется не сразу в течении недели

Спустя 18 минут, 1 секунда (2.07.2010 - 13:45) Денис Венецкий написал(а):
xD зарегистрировался =)))))

Спустя 1 день, 1 час, 42 минуты, 10 секунд (3.07.2010 - 15:27) Sharaw написал(а):
Всем привет. Вопрос решился. Нужно было слегка поспать biggrin.gif
Сервак скорее всего не держит некоторые операции сокетов, помог CURL
Вот код может кому-то пригодится:
 
///////////////////////////////////////////////////////////////////////////////////
$uagent = 'Mozilla/5.1 (Windows NT 6.1) Firefox/3.6.6';
$referer = 'http://www.avia-board.com/index.php';
$url = 'http://www.avia-board.com/board/view.php?id=1';//board/view.php?id=1
$cookies = 'PHPSESSID=e031487256d2bc28600bca65402557c4';
// ID сессии беру снифером при удачном соединении из браузера, как еще ее выдрать не придумал //является важным параметром для этого соединения

$c = curl_init();
curl_setopt($c,CURLOPT_URL, $url);
curl_setopt($c,CURLOPT_USERAGENT, $uagent);
curl_setopt($c,CURLOPT_REFERER, $referer);
curl_setopt($c, CURLOPT_COOKIE, $cookies);
curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file); //файл для сохранения куки
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file); //файл для вызова куки
//с помощью сохранения куки можем менять страницы в скрипте сохраняя авторизацию
//curl_setopt($c, CURLOPT_HTTPHEADER, $header);

curl_setopt ($c, CURLOPT_HEADER, 1);//результат включает заголовки ответа сервера
..curl_setopt ($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, '');//данные POST запроса, оказались невостребованы
curl_setopt($c,CURLOPT_RETURNTRANSFER, 1);//При установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его
$result = (curl_exec($c));
curl_close($c);
//////////////////////////////////////////////////////////////////////////////////

SlavaFr
По этому способу не сработало почему-то, хотя задумка хорошая...

Короче всем спасибо rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.