Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.12.2012, 15:09
grib_aga grib_aga вне форума
Прохожий
 
Регистрация: 19.12.2012
Сообщения: 14
Репутация: 10
По умолчанию Помогите разобраться почему не работает программа

Собственно, начал изучать работу с сетью в Дельфи и решил написать программу, проверяющую верно ли указаны данные для авторизации на одном из сайтов по IT.

Код:
  idhttp1.HandleRedirects:=true;
  idHttp1.AllowCookies:=True;
  idhttp1.CookieManager:=IdCookieManager1;
  IdHTTP1.Request.AcceptEncoding:='deflate';
  IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)';
  IdHTTP1.Request.AcceptLanguage := 'ru-RU,ru;q=0.9,en;q=0.8';
  IdHTTP1.Request.Connection := 'keep-alive';
  IdHTTP1.Request.AcceptEncoding:='deflate';


  Data:=TstringList.Create;
  Data.Add('actions=add');
  Data.Add('logines=wormix');
  Data.Add('passwdr=wormix1');
  StrPage:=idhttp1.Post('http://excode.ru/aut.php', Data);
    if Pos('accaunt', StrPage)<>0 then
      Label3.Caption:='Good'
    else Label3.Caption:='Bad';
 Data.Free;

Программа выдаёт всё время бэд. Подозреваю дело в том, что после авторизации на aut.php идёт редирект на index.php, хотя редирект в инди вкл, в общем нз, прошу помощи.

Delphi 7, Indy предустановлена.

Последний раз редактировалось grib_aga, 19.12.2012 в 15:15.
Ответить с цитированием
  #2  
Старый 19.12.2012, 15:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а если искать "account"?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 19.12.2012, 15:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

и задать:
Код:
Request.ContentType:='application/x-www-form-urlencoded';
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 19.12.2012, 16:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от NumLock
а если искать "account"?
Ты не поверишь, но он правильно написал. Войди с логином-паролем из первого поста и посмотри на ссылку "профиль" в правом блоке

ТС, попробуй правильно заполнить поле referrer и перед постом формы авторизации делать get на основную страницу, возможно, там ставятся какие-то куки...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 19.12.2012, 19:25
grib_aga grib_aga вне форума
Прохожий
 
Регистрация: 19.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

PhoeniX, NumLock, поправил код, не работает.

Код:
    idHttp1 := TIdHTTP.Create(Self);
    CM := TidCookieManager.Create(idHttp1);
    idHttp1.CookieManager := CM;

  idhttp1.HandleRedirects:=true;
  idHttp1.AllowCookies:=true;
  IdHTTP1.Request.UserAgent := 'Opera/9.80 (Windows NT 5.1; MRA 5.10 (build 5339)) Presto/2.12.388 Version/12.11';
  IdHTTP1.Request.Host:='excode.ru';
  IdHTTP1.Request.Accept:='text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1';
  IdHTTP1.Request.AcceptLanguage:= 'ru-RU,ru;q=0.9,en;q=0.8';
  IdHTTP1.Request.AcceptEncoding:='gzip, deflate';
  IdHttp1.Request.Referer:='http://excode.ru/';
  IdHTTP1.Request.Connection:= 'Keep-Alive';
  IdHTTP1.Request.ContentLength:=42;
  IdHttp1.Request.ContentType:='application/x-www-form-urlencoded';


  Data:=TstringList.Create;
  Data.Add('actions=add');
  Data.Add('logines=wormix');
  Data.Add('passwdr=wormix1');
  StrPage:=idhttp1.Get('http://excode.ru/');
  StrPage:=idhttp1.Post('http://excode.ru/aut.php', Data);
    if Pos('accaunt', StrPage)<>0 then
      Label3.Caption:='Good'
    else Label3.Caption:='Bad';
 Data.Free;
 CM.Free;
 idHttp1.Free;

Вообще в оригинале передаётся ещё строка наподобе этой, каждый раз разная:
Код:
Cookie: n2date=1355926357; md=0; nexdate=1355926344; auth=0; __utma=91456206.326904374.1355912958.1355927014.1355940739.5; __utmb=91456206.5.10.1355940739; __utmc=91456206; __utmz=91456206.1355912959.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)

У меня в программе она, конечно же, не передатёся, хотя КукиМенеджер вкл. Объясните.

Если пробывать передавать так, то тоже бэд:

Код:
idHttp1.Request.CustomHeaders.Add(Cookie: бла-бла-бла)
Ответить с цитированием
  #6  
Старый 19.12.2012, 23:01
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

"Строка наподобие этой" должна управляться CookieManager-ом. Вручную её ставить не нужно.
Попробуй
Код:
Data.Text := 'actions=add&logines=wormix&passwdr=wormix1';
вместо Data.Add
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 20.12.2012, 09:50
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

работает
Код:
var
  strm: TStringStream;
  i: Integer;
  s: String;
begin
  IdHTTP1.HandleRedirects:=False;
  IdHTTP1.AllowCookies:=True;
  IdHTTP1.CookieManager:=IdCookieManager1;
  strm:=TStringStream.Create('actions=add&logines=wormix&passwdr=wormix1');
  try
    IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
    try
      IdHTTP1.Post('http://excode.ru/aut.php', strm);
    except
      if IdHTTP1.ResponseCode div 100 = 3 then
      begin
        for i:=0 to IdCookieManager1.CookieCollection.Count-1 do
          IdHTTP1.Request.CustomHeaders.Add('Cookie: '+IdCookieManager1.CookieCollection.Items[i].CookieText);
        IdHTTP1.Request.Referer:='http://excode.ru/index.php';
        IdHTTP1.Request.ContentType:='text/html';
        s:=IdHTTP1.Get('http://excode.ru/index.php');
        if Pos('accaunt', s)>0 then Label1.Caption:='ok' else Label1.Caption:='err';
      end;
    end;
  finally
    strm.Free;
  end;
end;
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 20.12.2012 в 09:53.
Ответить с цитированием
  #8  
Старый 20.12.2012, 11:02
grib_aga grib_aga вне форума
Прохожий
 
Регистрация: 19.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от PhoeniX
вместо Data.Add
Не работает.
Цитата:
Сообщение от NumLock
работает
Можете уточнить свою версию Дельфи и Инди?
Вышеприведённый код отказывается у меня работать, кукисы так и не посылаются, даже еrr не выводится.
Ответить с цитированием
  #9  
Старый 20.12.2012, 11:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

IdVers.inc
Цитата:
gsIdProductName = 'Indy'; {do not localize}
gsIdVersion = '9.00.10'; {do not localize}
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 20.12.2012, 12:10
grib_aga grib_aga вне форума
Прохожий
 
Регистрация: 19.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

NumLock, программа крашится с ошибкой "Project raised exception class EidHTTPProtocolException with message 'HTTP 1.1/ 302 Found'. Process Stopped".
До этого не было ошибки т.к. на автомате сменил редирект с выкл на вкл.
Что делать?

Последний раз редактировалось grib_aga, 20.12.2012 в 12:30.
Ответить с цитированием
  #11  
Старый 20.12.2012, 13:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

-убрать галочку "Stop...", чтобы в debug-режиме не поднималось исключение
-см. внимательно исходник. там как раз при возникновении исключения и происходит дальнейшая работа

тут проблема в том, что при возникновении редиректа (если его обработка включена) при 302 коде ответа Инди не сохраняет куки и еще к тому же делает редирект POST'ом на index.php (без кук). естественно сервер в шоке.
я же перехватываю редирект сам (обработка выключена), считываю куки и делаю GET на index.php уже с куками. в итоге там и находится заветное "accaunt".
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Dagmanor (05.08.2013)
  #12  
Старый 20.12.2012, 14:50
grib_aga grib_aga вне форума
Прохожий
 
Регистрация: 19.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

Воистину, спасибо, очень помогли!
Ответить с цитированием
  #13  
Старый 31.07.2013, 20:00
cooperdon78 cooperdon78 вне форума
Прохожий
 
Регистрация: 31.07.2013
Сообщения: 1
Версия Delphi: Delphi 8
Репутация: 10
По умолчанию

Спасибо и от меня, помогли!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter