Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 270

/ вопрос открыт /

Здравствуйте!
Хочу сделать программу которая логинится на сервере статистики и смотрит сколько денег осталось. сервер находится тут - http://stat.gmss.ru Там инфа отправляется методом Post. После того как вводишь данные попадаешь на страницу статистики. Как можно наPOSTить имя, пароль, язык и узнать страница статистики.
Там кукисы НЕ используются. После напостивания инфы в аддресной строке браузера - http://stat.gmss.ru/pls/sip_w/www.ViewHomePage?p_logname=9897088&p_chksum=297973358254675 логин как видно 9897088.

Примечание #1 (6 января 2009, 12:55):
не "страница статистики.", а "фддрес страницы статистики."

Vova Sitnov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Vova Sitnov (статус: Посетитель)
Вопрос отправлен: 6 января 2009, 12:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 27; последнее сообщение — 19 января 2009, 13:17; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:02 [#1]:

если видите в адресной сроке то что вы написали, то это GET а не POST
Vova Sitnov

Vova Sitnov (статус: Посетитель), 6 января 2009, 13:05 [#2]:

В исходном коде можно увидеть - <FORM ACTION = "www.GetHomePage" METHOD = "POST"> далее идет как раз инпут тайп и далее... Вы правы, но аддрес страницы в адд. строке не равен аддресу страници куда постим...
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:32 [#3]:

а в чем проблемма запость три параметра с помощью инди или ICS или synapse (как кто-то часто советует ;)
Vova Sitnov

Vova Sitnov (статус: Посетитель), 6 января 2009, 13:35 [#4]:

В этом то и проблемма я не знаю как норм люди ето дело постят(я такого рода проги первый раз делаю). Но запостить ето одно нужно ешо узнать аддрес стр статистики (помоему должен прийти ответ).
Death_Master

Death_Master (статус: Посетитель), 6 января 2009, 13:49 [#5]:

А можно проснифить что куда передаётся?
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
Vova Sitnov

Vova Sitnov (статус: Посетитель), 6 января 2009, 13:52 [#6]:

Death_Master, ээээ я ни знаю. а как это делается??
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:58 [#7]:

в том то и сложность, много подводных камней, это я уверен не крайний. Поэтому и код вам никто не напишет, надо протестировать и довести, а не зная исходных данных это не возможно.
глядя на исходный текст страницы подумалось что на этом же сервере есть страница или какой редирект, короч надо отправлять скорее всего на http://stat.gmss.ru/pls/sip_w/www.pageviewer/www.GetHomePage
но может я ошибаюсь
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 14:00 [#8]:

или http://stat.gmss.ru/pls/sip_w/www.GetHomePage
Vova Sitnov

Vova Sitnov (статус: Посетитель), 6 января 2009, 14:03 [#9]:

http://stat.gmss.ru/pls/sip_w/www.GetHomePage?p_logname=9897088&p_pwd=<пароль>
Если так в браузере написать то попадаю на страницу статистики
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 14:14 [#10]:

тогда просто гетом получай http://stat.gmss.ru/pls/sip_w/www.GetHomePage?p_logname=9897088&p_pwd=<пароль>

т.е. исходный текст страницы
или через компонент твебброузер
исходя из поставленной задачи, и не надо никаких постов
Death_Master

Death_Master (статус: Посетитель), 6 января 2009, 14:18 [#11]:

Качаем full edition с http://www.ieinspector.com/httpanalyzer/download.html
Ставим :)

после запуска проги набираем адрес в адресной строке браузера, но пока не переходим

в проге нажимаем старт (зелёный треугольник)
заходим на страницу и выполняем нужные действия
нажимаем стоп (недалеко от старта ;) )
Нажимаем сохранить.... и файл готов к пересылке :)
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
Vova Sitnov

Vova Sitnov (статус: Посетитель), 6 января 2009, 14:39 [#12]:

сделал вот так s := IdHTTP1.Get('http://stat.gmss.ru/pls/sip_w/www.GetHomePage?p_logname=9897088&p_pwd=<пароль>');
Получилось с помощью метода GET в S(string) у меня:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" NAME="" CONTENT="text/html;charset=windows-1251">
<META HTTP-EQUIV=REFRESH CONTENT="0; URL=/pls/sip_w/www.ViewHomePage?p_logname=9897088&p_chksum=518253455894007">
<TITLE>Домашняя страница абонента</TITLE>
</HEAD>
<BODY>
<TABLE ALIGN = "center" HEIGHT = 100% WIDTH = 100%>
<TR VALIGN = "center">
<TD STYLE = "TEXT-ALIGN : center; COLOR : #000000; FONT-SIZE : 200%">
<A HREF="/pls/sip_w/www.ViewHomePage?p_logname=9897088&p_chksum=518253455894007">Идет загрузка...</A>
</TD>
</TR>
</TABLE>
</HTML>

Надо каким-то образом вытащить оттуда /pls/sip_w/www.ViewHomePage?p_logname=9897088&p_chksum=518253455894007 но как ведь chksum может иметь разную длину??
Вадим К

Вадим К (статус: Академик), 6 января 2009, 19:17 [#13]:

Регулярные выражения. Просто и лаконично.
Для этого идем сюда http://regexpstudio.com/RU/, качаем библиотеку. От тудова нам понадобиться один файл - regExpr.pas Его надо скопировать в папку с проектом (либо в какую-нибудь доступную по путям), потом добавить в Uses.
Теперь нам надо такой код
var re:TRegExpr;
begin
  re:=TRegExpr.create;
  re.expression := '<A\sHREF="(\/pls\/sip_w\/www\.ViewHomePage\?p_logname=(\d+)&p_chksum=(\d+))">';
  if re.exec(s) then //s - строка с хтмл кодом.
  begin
   //ура, строка найдена. Теперь в re.match[1]  будет нужная строка. в re.match[2] цифры p_logname
  //а в re.match[3] ваш p_chksum
  //если внимательно присмотреться, то эти параметры взяты в скобки.
  end;
  re.free;
Регулярное выражения я вроде написал правильно. (на том же сайте можно скачать утилиту для тестирования регулярных выражений - в простонародьи - регулярок).
Возможно кто то скажет, что в данном случае регулярные выражения излишек, что они будут медленно работать. Возможно, но в данном случае, что одна десятая секунды, что одна сотая.... А скорость написания кода просто огромная. На первый взгляд регулярки кажуться дикими, но когда к ним привыкаешь, то многие вещи решаешь совсем по другому. Там где другой будет писать хитрый парсер и километры кода, просто пишешь две строки регулярки.
Галочка "подтверждения прочтения" - вселенское зло.
Vova Sitnov

Vova Sitnov (статус: Посетитель), 8 января 2009, 07:11 [#14]:

Странно: через тестер всё находит правильно, в программе нифига, exec(s)=false
Vova Sitnov

Vova Sitnov (статус: Посетитель), 8 января 2009, 07:30 [#15]:

в s точно есть html код(проверял showmessage'ем)
Вадим К

Вадим К (статус: Академик), 8 января 2009, 09:54 [#16]:

Да, текст то многострочный, может быть. Давно в такой конструкции не мучил его - не помню причин не работы. Но там есть одна загвоздка. В регулярных выражениях есть такое понятие как модификаторы. Их здесь 6 штук (s, i, m, r, g, x). Иногда я снимал флажок G (re.ModifierG := false; остальные подобным образом - по последней букве)
Хотя все таки есть одна идея. Возможно, что ваш сайт отдает unix-like переводы строк. Ну что ж. Просто намекните об этом классу.
re.LineSeparators := #10;
Если и это не поможет, попробуйте ещё флагом М поиграть.
Что то точно должно сработать. А то иначе странно всё это. Решение с неверным переводом строк мне кажеться наиболее правдоподобным.
Галочка "подтверждения прочтения" - вселенское зло.
Vova Sitnov

Vova Sitnov (статус: Посетитель), 8 января 2009, 13:01 [#17]:

[code]function TForm1.balance:string;
var
IdHTTP1:TIdHTTP;
re:TRegExpr;
s:string;
str:TStringList;
I: Integer;
begin
if (user<>'') and (pass<>'') then
begin
IdHTTP1:=TIdHTTP.Create(Form1);
s := IdHTTP1.Get('http://stat.gmss.ru/pls/sip_w/www.GetHomePage?p_logname='+user+'&p_pwd='+pass);
re:=TRegExpr.create;
str:=TStringList.Create;
re.expression := '<A\sHREF="(\/pls\/sip_w\/www\.ViewHomePage\?p_logname=(\d+)&p_chksum=(\d+))">';
str.Text:=s;
for I := 0 to str.Count - 1 do
begin
if re.exec(str.Strings[i]) then
ShowMessage(re.Match[1]+' '+re.Match[2]+' '+re.Match[3]);
ShowMessage(str.Strings[i]);
end;
Memo1.Lines.Text:=s;
re.free;
str.Free;
end;
end;[/code]
Вот такая у меня функция но все равно ничего не получается. html код страници в сообщении выше.
Vova Sitnov

Vova Sitnov (статус: Посетитель), 8 января 2009, 13:20 [#18]:

Нет, дело не в переводе строк... я уже так написал
re.exec('<A HREF="/pls/sip_w/www.ViewHomePage?p_logname=9834020_1&p_chksum=471240972066210">Идет загрузка...</A>');
ShowMessage(re.Match[1]+' '+re.Match[2]+' '+re.Match[3]);
не помогло...
Вадим К

Вадим К (статус: Академик), 8 января 2009, 13:24 [#19]:

А в последнем случае указанная регулярка не совсем правильная и ничего не найдет. Чуть позже посмотрю, как только дойдут руки до Windows'a
Галочка "подтверждения прочтения" - вселенское зло.
Vova Sitnov

Vova Sitnov (статус: Посетитель), 10 января 2009, 12:04 [#20]:

как не правельная ведь тестер всё находит?

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 5 апреля 2020, 07:24
Выполнено за 0.02 сек.
Рейтинг@Mail.ru