|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 6 января 2009, 12:53
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 27; последнее сообщение — 19 января 2009, 13:17; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:02 [#1]:
если видите в адресной сроке то что вы написали, то это GET а не POST
|
|
Vova Sitnov (статус: Посетитель), 6 января 2009, 13:05 [#2]:
В исходном коде можно увидеть - <FORM ACTION = "www.GetHomePage" METHOD = "POST"> далее идет как раз инпут тайп и далее... Вы правы, но аддрес страницы в адд. строке не равен аддресу страници куда постим...
|
|
Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:32 [#3]:
а в чем проблемма запость три параметра с помощью инди или ICS или synapse (как кто-то часто советует
|
|
Vova Sitnov (статус: Посетитель), 6 января 2009, 13:35 [#4]:
В этом то и проблемма я не знаю как норм люди ето дело постят(я такого рода проги первый раз делаю). Но запостить ето одно нужно ешо узнать аддрес стр статистики (помоему должен прийти ответ).
|
|
Death_Master (статус: Посетитель), 6 января 2009, 13:49 [#5]:
А можно проснифить что куда передаётся?
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
|
|
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
но может я ошибаюсь
|
|
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 (статус: Посетитель), 8 января 2009, 07:11 [#14]:
Странно: через тестер всё находит правильно, в программе нифига, exec(s)=false
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 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 (статус: Посетитель), 10 января 2009, 12:04 [#20]:
как не правельная ведь тестер всё находит?
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|