Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
1

Получить текст страницы, если она запрашивается с помощью POST запроса

18.04.2013, 16:58. Показов 5586. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! GET запрос страницы я делал помощью my $html = get('www.my.url'). А как мне получить текст страницы, если она запрашивается с помощью POST запроса?
И попутный вопрос: а как запрашивать страницу как залогиненный пользователь (с логином и паролем).
Заранее благодарю!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2013, 16:58
Ответы с готовыми решениями:

Получить текст ответа POST запроса при 400 ошибке
При отправке пост запроса сервер отдает ошибку 400 но отправляет текст в ответе. Вот я его и не...

Проблема с авторизацией на сайте с помощью POST-запроса
Всем привет, есть небольшая проблема нужно авторизаваться на сайте deficitwarez.ru на странице...

Как менять IFRAME с помощью POST запроса?
Privet vsem V doumente est forma i iframe. Kak posilat POST zaprosis formi chtobi menjalsya...

Распарсить текст Post-запроса
Ребят, такая проблема. Я выполняю post запрос на страницу, получаю ее и мне нужно сделать а-ля...

17
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
18.04.2013, 19:47 2
Модуль WWW-Mechanize всё это делает
1
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
18.04.2013, 20:01 3
Посмотрите здесь. Там и примеры есть.
1
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
19.04.2013, 00:20  [ТС] 4
Цитата Сообщение от pka Посмотреть сообщение
Посмотрите здесь. Там и примеры есть.
Правильно ли я понял? Нужно сюда вставить мой логин и пароль?
Perl
1
$req->authorization_basic('aas', 'mypassword');
Добавлено через 1 час 29 минут
Я смогу таким способом получить, например, код страницы этого фирума как если бы я был залогиненным?
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
21.04.2013, 17:21 5
Цитата Сообщение от body90 Посмотреть сообщение
Я смогу таким способом получить, например, код страницы этого фирума как если бы я был залогиненным?
Нет
1
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.04.2013, 21:00  [ТС] 6
Цитата Сообщение от pka Посмотреть сообщение
Нет
А что делать, чтоб было можно?
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
25.04.2013, 14:49 7
Авторизация через authorization_basic работает в случае, если сама страница отдаётся по паролю. Движки форумов обычно авторизуются через куки и прочую служебную информацию. Т.е. надо сделать несколько иногда не очевидных вещей, а потом уже получить страницу зарегистрированного пользователя. Только вот зачем это делать - непонятно. Форум и без регистрации отдаёт читабельные страницы.
0
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
25.04.2013, 20:43  [ТС] 8
Цитата Сообщение от pka Посмотреть сообщение
Только вот зачем это делать - непонятно.
Форум - это пример.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
26.04.2013, 11:43 9
Цитата Сообщение от body90 Посмотреть сообщение
Форум - это пример
Если только например, тогда Вы заполняете форму входа, отправляете её. Получаете куки. Сохраняете их (или сохраняете частично). Делаете запрос нужной страницы, подставив нужные куки в нужное место. Иногда некоторые дополнительные ухищрения (очень редко). Получаете страницу зарегистрированного пользователя.
1
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.04.2013, 23:35 10
А как мне получить текст страницы, если она запрашивается с помощью POST запроса?
Читаешь документацию на модуль LWP
Там есть и POST
1
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 15
09.10.2013, 23:09 11
Цитата Сообщение от pka Посмотреть сообщение
Авторизация через authorization_basic работает в случае, если сама страница отдаётся по паролю. Движки форумов обычно авторизуются через куки и прочую служебную информацию. Т.е. надо сделать несколько иногда не очевидных вещей, а потом уже получить страницу зарегистрированного пользователя. Только вот зачем это делать - непонятно. Форум и без регистрации отдаёт читабельные страницы.
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $login='test11';
my $pass='test11';
my $url="http://www.the-game.ru/overview/";
$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
use HTTP::Cookies;
  $ua->cookie_jar( HTTP::Cookies->new(
    'file' => '/some/where/cookies.lwp',        #файл обмена
    'autosave' => 1,       #по завершении, сохранять ли файл
  ));
#  $ua->referer ("www.the-game.ru");
my $req = HTTP::Request->new(POST => $url,[
 
Host=> 'www.the-game.ru',
User-Agent=> 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0',
 Accept=> 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
Accept-Language=> 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
Accept-Encoding=> 'gzip, deflate',
Referer=> 'http://www.the-game.ru/',
pwd=>'t1est',
login=>'t1est',
action=>'action',
#action=> 'login&login=t1est&pwd=t1est',
Host=> 'localhost:27275',
 
]);
my $res = $ua->request($req);
 $res = $res->as_string;
open FILE, '>ww.xls';
   print FILE "$res \n ";
Я уже чего только не подбирал.

Добавлено через 6 часов 31 минуту
http://www.the-game.ru/overview/


Код
POST /overview/ HTTP/1.1
Host: [url]www.the-game.ru[/url]
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: [url]http://www.the-game.ru/[/url]
Cookie: __utma=167751035.95729135.1381258042.1381258042.1381295800.2; __utmz=167751035.1381258042.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=167751035.6.10.1381295800; __utmc=167751035; SID=9758451ARHJUBYXGPPVKMDCPQMW
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
action=login&login=t1est&pwd=t1est
Вот что пишет мы посылаем серверу, когда все проходит ок.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
10.10.2013, 15:50 12
Возможно, формируете не те куки или не в полном объёме, возможно Вам возвращают не текст, а gzip, да и какой интерес играть в игры, если хитрить?
0
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 15
10.10.2013, 17:16 13
Цитата Сообщение от pka Посмотреть сообщение
Возможно, формируете не те куки или не в полном объёме, возможно Вам возвращают не текст, а gzip, да и какой интерес играть в игры, если хитрить?
В игре допускается администрацией такие способы, на определенных аккаунтах, там даже есть реализация перл-скриптов для автоматизации игры. Кроме того есть сторонние клиенты, которые работают подобным образом и администрация об их знает, так что с этической стороны проблемы нет. Для меня это лишь способ изучать перл, (логин\пароль не прячу). Насколько мне известно, там куки вообще не должны читаться, раздел с куками я содрал откуда-то, где было написано, что подобный код "схавает" любой любознательный сервер. Если кто научит правильно их обрабатывать - скажу огромное спасибо. Переменная получаемая содержит текст страницы, где ввод имени пароля. Документацию по Post запросу прочитал вроде. Смысл затеи - научиться читать любые сайты без капчи. Есть еще одно место, где мне хотелось бы применить подобную технологию, но там все реализовано посложней, посему хотелось бы начать с этого.

Добавлено через 5 минут
У меня есть скрипт, который решает эту проблему, написанный профессиональным программистом, но там для меня темный лес. В случае чего могу выложить, но там скрипт большой (много делает всего), и по блоку, делающему заход на акк возникнет много вопросов.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
12.10.2013, 19:47 14
По тем кукам, что Вы привели, у меня сложилось впечатление:
- куки хранят в себе как минимум 4 временные метки, причём разные;
- одна из них возможно временная метка команды (но я могу ошибаться, это надо тестить);
- одно из полей - возможный идентификатор пользовательской системы или пользователя.
Естественно, что временные метки меняются со временем (если я не ошибся, но уж больно похожи), а идентификатор системы/пользователя может как меняться при каждом логине, так и быть фиксированным под конкретный логин (это зависит от того, как решил разработчик сайта). Плюс, после входа в систему куки и их назначения могут меняться, иногда радикально.

По поводу сайта без капчи - если капча сделана по уму, то она никак не связана с теми куками, которые отдаёт сайт, ну или связана случайным образом и очень ограниченное время, а потом идёт переприсваивание случайного числа. Так что в большинстве случаев не вариант.

p.s. играть интереснее без читерства
0
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 15
12.10.2013, 20:44 15
Т.е. считаете, что во всем виноваты куки, а остальной код похож на правду? На PHP в аналогичной программе помоему вообще нет кук, но там подключение через сокет. И еще вопрос, на странице сайта:
Доступ к этой странице требует авторизации, введите свой логин и пароль</p><br><form method="post" name="login" action="/overview//"><input type="hidden" name="action" value="login"><table border="0" cellpadding="0" cellspacing="15" align="center" width="70%"><tr><td>Имя</td><td align="right"><input name="login" type="text" tabindex="0" onselect="NeedFocus=0" onchange="NeedFocus=0"></td></tr><tr><td>Пароль</td><td align="right"><input type="password" name="pwd" maxlength="25" onselect="NeedFocus=0" onchange="NeedFocus=0"></td></tr><tr><td colspan="2"
Т.е. надо вводить input name="login", и input type="password" name="pwd", а браузер посылает запрос другой перемнной, это нормально? И что надо посылать.
Насчет читерства, это платные аккаунты и там администрация разрешает проводить подобные методы подключения.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
12.10.2013, 21:24 16
Цитата Сообщение от mpasl Посмотреть сообщение
а браузер посылает запрос другой перемнной
Судя по приведенному Вами фрагменту кода страницы и логе из сообщения #11, переменные как раз соответствуют.
0
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 15
14.10.2013, 15:51 17
Цитата Сообщение от pka Посмотреть сообщение

p.s. играть интереснее без читерства
Cookie: __utma=167751035.95729135.1381258042.1381258042.1381295800.2; __utmz=167751035.1381258042.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=167751035.6.10.1381295800; __utmc=167751035; SID=9758451ARHJUBYXGPPVKMDCPQMW
Cookie: __utma=167751035.95729135.1381258042.1381747073.1381749998.9; __utmz=167751035.1381258042.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=167751035; SID=9767904COECXUMCAAQPMLFKJWHM; __utmb=167751035.1.10.1381749998
Вот куки 2-х успешных сессий. Дальше идут гет запросы. Так что получить средствами Перл эту страничку нереально и надо переходить на PHP?
А если через Сокеты? То же не прокатит?
0
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 15
16.10.2013, 10:20 18
Почистил куки и отправил запрос, все прошло, значит по идее куки на эту конкретную страницу не нужны, по ходу разобрался с куками.
http://www.the-game.ru/overview/

POST /overview/ HTTP/1.1
Host: www.the-game.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.the-game.ru/
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
action=login&login=t1est&pwd=t1est
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Tue, 15 Oct 2013 17:56:31 GMT
Content-Type: text/html; charset=utf-8
Set-Cookie: SID=9770003KHGKDOPAUMTAOGUDXSIW; path=/
Cache-Control: private, max-age=3600
Expires: Tue, 15 Oct 2013 18:56:31 GMT
Transfer-Encoding: chunked
X-OSSProxy: OSSProxy 1.3.336.320 (Build 336.320 Win32 en-us)(Aug 16 2013 17:38:43)
Connection: keep-alive

Добавлено через 6 секунд
Почистил куки и отправил запрос, все прошло, значит по идее куки на эту конкретную страницу не нужны, по ходу разобрался с куками.
http://www.the-game.ru/overview/

POST /overview/ HTTP/1.1
Host: www.the-game.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.the-game.ru/
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
action=login&login=t1est&pwd=t1est
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Tue, 15 Oct 2013 17:56:31 GMT
Content-Type: text/html; charset=utf-8
Set-Cookie: SID=9770003KHGKDOPAUMTAOGUDXSIW; path=/
Cache-Control: private, max-age=3600
Expires: Tue, 15 Oct 2013 18:56:31 GMT
Transfer-Encoding: chunked
X-OSSProxy: OSSProxy 1.3.336.320 (Build 336.320 Win32 en-us)(Aug 16 2013 17:38:43)
Connection: keep-alive

Добавлено через 11 минут
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $url="http://www.the-game.ru/overview/";
#$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
 
 
my $req = HTTP::Request->new(POST => $url,[
"POST /overview/ HTTP/1.1 \n",
"Host: [url]www.the-game.ru[/url] \n",
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0 \n",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 \n",
"Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 \n",
"Accept-Encoding: gzip, deflate \n",
"Referer: [url]http://www.the-game.ru//[/url] \n",
"Connection: keep-alive \n",
"Content-Type: application/x-www-form-urlencoded \n",
"Content-Length: 34 \n",
"action=login&login=t1est&pwd=t1est \n",
]);
my $res = $ua->request($req);
 $res = $res->as_string;
open FILE, '>ww.xls';
   print FILE "$res \n $url";
И чего не может не хватать?

Добавлено через 11 часов 58 минут
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $refer = "http://www.the-game.ru/";
my $url="http://www.the-game.ru/communicator/555128";
$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
my $req = HTTP::Request->new(POST => $url,[
    'Accept-Charset' => 'iso-8859-1,*,utf8',
    'Accept'=> 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Host'=> 'www.the-game.ru',
    #'Content-Length'=> '461500',
    'Accept-Language'=> 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    #'Accept-Encoding'=> 'gzip, deflate',
    'Referer'=> 'Referer: [url]http://www.the-game.ru/communicator/555128[/url]',
    'Cookie' => '',
    #POST => 'overview/ HTTP/1.1',
    'action'=> 'login',
    'login' => $login,
    'pwd'   => $pwd
]);
$req->header('Accept'=>'text/html');
my $res = $ua->request($req);
 $res = $res->as_string;
open FILE, '>ww.xls';
print FILE "$res \n $url";
Вот что имею на данный момент.
Вопрос как посчитать 'Content-Length', и может ли от ее не проходить авторизация?
Вот что за ответ я получаю от сервера:
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Date: Wed, 16 Oct 2013 06:15:39 GMT
Server: nginx/1.1.19
Content-Length: 4615
Content-Type: text/html; charset=utf-8
Expires: Wed, 16 Oct 2013 05:58:59 GMT
Client-Date: Wed, 16 Oct 2013 06:15:41 GMT
Client-Peer: 176.9.127.8:80
Client-Response-Num: 1
Link: </static/dnc.css>; rel="StyleSheet"; type="text/css"
Link: </static/favicon.ico>; rel="SHORTCUT ICON"
Set-Cookie:
Title: Страница доступна только авторизованным пользователям
X-Meta-Keywords: игра онлайн online бесплатно стратегия браузер пошаговая...
Ну и дальше страничка неавторизтрованного пользователя.

Добавлено через 6 секунд
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $refer = "http://www.the-game.ru/";
my $url="http://www.the-game.ru/communicator/555128";
$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
my $req = HTTP::Request->new(POST => $url,[
    'Accept-Charset' => 'iso-8859-1,*,utf8',
    'Accept'=> 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Host'=> 'www.the-game.ru',
    #'Content-Length'=> '461500',
    'Accept-Language'=> 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    #'Accept-Encoding'=> 'gzip, deflate',
    'Referer'=> 'Referer: [url]http://www.the-game.ru/communicator/555128[/url]',
    'Cookie' => '',
    #POST => 'overview/ HTTP/1.1',
    'action'=> 'login',
    'login' => $login,
    'pwd'   => $pwd
]);
$req->header('Accept'=>'text/html');
my $res = $ua->request($req);
 $res = $res->as_string;
open FILE, '>ww.xls';
print FILE "$res \n $url";
Вот что имею на данный момент.
Вопрос как посчитать 'Content-Length', и может ли от ее не проходить авторизация?
Вот что за ответ я получаю от сервера:
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Date: Wed, 16 Oct 2013 06:15:39 GMT
Server: nginx/1.1.19
Content-Length: 4615
Content-Type: text/html; charset=utf-8
Expires: Wed, 16 Oct 2013 05:58:59 GMT
Client-Date: Wed, 16 Oct 2013 06:15:41 GMT
Client-Peer: 176.9.127.8:80
Client-Response-Num: 1
Link: </static/dnc.css>; rel="StyleSheet"; type="text/css"
Link: </static/favicon.ico>; rel="SHORTCUT ICON"
Set-Cookie:
Title: Страница доступна только авторизованным пользователям
X-Meta-Keywords: игра онлайн online бесплатно стратегия браузер пошаговая...
Ну и дальше страничка неавторизтрованного пользователя.
0
16.10.2013, 10:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2013, 10:20
Помогаю со студенческими работами здесь

Открытие аккаунта с помощью HTTPS POST-запроса (Delphi XE3)
Здравствуйте ребята . -- Есть https://www.icloud.com/ на это сайте у меня есть AppleID:...

Повторение POST запроса при обновлении страницы
Доброе время суток, может кто-нибудь подсказать можно ли избавиться от повторного отправления POST...

Отправка post запроса без перезагрузки страницы
недавно задавал вопрос про отправку post запроса без перезагрузки страницы. Сказали ищи в...

Отправка POST запроса без показа страницы
Подскажите как проще всего отправить POST запрос (открыть страницу вида &quot;сайт/&amp;параметр=значение&quot;)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru