Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TidHTTP и сервер с аутентификацией


Автор: dihlofose 30.3.2006, 13:56
Добрый день.
Вопрос на тему использования метода Post в компоненте idHTTP.
Задача следующая: необходимо разместить вакансии на одном из рабочих сайтов (например www.rabota.mail.ru). Здесь необходима регистрация. После ее прохождения естественно имею пароль и логин. Так вот вопрос следующий, как мне с помощью данного компонента аутентифицироваться и после этого разместить вакансию? К сожалению, сейчас на запрос методом пост сейчас получаю страницу аутентификации, где поля "логин" и "пароль" не заполнены. Код написан ниже. Заранее спасибо.

Код

var
  Params      : TStringStream;
  AStrings    : TStrings;
  StringList  : TStringList;
  str         :string;
begin
   with IdHTTP1 do
   begin
     StringList := TStringList.Create;
     StringList.Add('login=ЛОГИН');
     StringList.Add('password=ПАРОЛЬ');
     Request.AcceptLanguage := 'ru';
     Request.Referer := 'http://www.rabota.mail.ru';
     Request.ContentType := 'application/x-www-form-urlencoded';
     Request.Connection := 'Close';
     Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; InfoPath.1)';
     Request.Pragma := 'no-cache';
     try
       str := IdHTTP1.Post('http://www.rabota.mail.ru/content/account/login/login.html', StringList);
     finally
     begin
       StringList.Free;
       Memo1.Text := str;
       Memo1.Lines.SaveToFile('C:\mail.html');
    end;
  end;
smile

Автор: _hunter 30.3.2006, 17:24
http://forum.vingrad.ru/index.php?showtopic=76156&st=80&unread=&#entry688528
smile

Автор: dihlofose 31.3.2006, 09:54
Цитата(_hunter @ 30.3.2006, 17:24)
http://forum.vingrad.ru/index.php?showtopic=76156&st=80&unread=&#entry688528
smile

Прочитав всё по данной ссылке сделал следующее:

1. В HTTPOptions выключил hoForceEncodeParams
2. TIdCookieManager прикрутил
3. HandleRedirect поставил в true

Но ситуация не изменилась, все равно при правильном вводе пароля, попадаю на страницу авторизации, а при неправильном говорит что я неправильно ввел логин или пароль...
Добавлено @ 09:56
Также к предыдущему добавил следующее:
4. MaxLineAction переключил в maSplit.
5. переключил ProtocolVersion на pv1_0

Автор: _hunter 31.3.2006, 10:37
значит берем сниффер и смотрим чем самоклепный запрос отличается от передаваемого браузером

Автор: dihlofose 31.3.2006, 12:09
я использовал HTTP Interceptor, запрос один в один... все же не работает...если можно киньте ссылку на снифер.

Автор: Snowy 31.3.2006, 12:18
Установи HandleRedirect в true

Автор: dihlofose 31.3.2006, 12:19
Цитата(Snowy @ 31.3.2006, 12:18)
Установи HandleRedirect в true

установил, ситуация такая же

Автор: Snowy 31.3.2006, 12:59
Цитата(dihlofose @ 31.3.2006, 12:09 Найти цитируемый пост)
все же не работает...если можно киньте ссылку на снифер.
Лучше маппер: http://forum.vingrad.ru/index.php?showtopic=89811&view=findpost&p=689298

Автор: dihlofose 31.3.2006, 15:18
Цитата(Snowy @ 31.3.2006, 12:59)
Цитата(dihlofose @  31.3.2006,  12:09 Найти цитируемый пост)
все же не работает...если можно киньте ссылку на снифер.
Лучше маппер: http://forum.vingrad.ru/index.php?showtopic=89811&view=findpost&p=689298

Ща попробую, но есть сомнения, что он мне что-то нового покажет...видимо здесь в чем-то другом загвоздка

Автор: dihlofose 3.4.2006, 15:54
К сожалению, так ничего и не вышло...всё стоит на том же месте. Может подскажет кто-нибудь какие варианты здесь еще возможны?

Автор: N1k 4.4.2006, 08:59
dihlofose, а ты сразу пытаешься авторизоваться?
Может стоит попробовать открыть страницу с формой, а уж потом...

Автор: dihlofose 4.4.2006, 11:37
N1K,
да действительно я пытаюсь сразу авторизоваться, но к сожалению, я так и не понял какую страницу нужно сначала запросить.. с учетом всех вышеперечисленных изменений, запросил методом get до начала авторизации непосредственно страницу авторизации. И опять не работает(((...ниже привожу код. Я опять чего-то не понял?

Код

var
  StringList  : TStringList;
  str         :string;
begin
   with IdHTTP1 do
   begin
     StringList := TStringList.Create;
     StringList.Add('login=ЛОГИН');
     StringList.Add('password=ПАРОЛЬ');
     Request.AcceptLanguage := 'ru';
     Request.Referer := 'http://www.rabota.mail.ru/content/account/login/index.html?msg=require_login';
     Request.ContentType := 'application/x-www-form-urlencoded';
     Request.Connection := 'Close';
     Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; InfoPath.1)';
     Request.Pragma := 'no-cache';
     idHttp1.CookieManager := IdCookieManager1;
     IdHTTP1.Get('http://www.rabota.mail.ru/content/account/login/login.html');
     
     try
       str := IdHTTP1.Post('http://www.rabota.mail.ru/content/account/login/login.html', StringList);
     finally
     begin
      Memo1.Text := str;
      Memo1.Lines.SaveToFile('C:\mail.html');
      StringList.Free;
   end;
  end;
end;

Автор: dihlofose 6.4.2006, 15:44
Уважаемые знатоки Delphi, помогите...проблема так и не решена...

Автор: N1k 7.4.2006, 09:37
Цитата(dihlofose @ 6.4.2006, 15:44 Найти цитируемый пост)
Уважаемые знатоки Delphi, помогите...проблема так и не решена...

Врядли кто-то тебе будет помогать.
Чтоб понять в чем дело - нужно зарегестрироваться и посмотреть что к чему.
Дать резюме и вакансию можно и без регистрации.
И вообще, мож ты брутер пишешь?

Автор: redstorm 13.4.2006, 15:08
Цитата(dihlofose @ 6.4.2006, 15:44)
Уважаемые знатоки Delphi, помогите...проблема так и не решена...

Был такой прикол, во избежании несанкционированного доступа к серверу, и защиты от СПАМа на многих станциях стоит скрипт, которуй определяет начальную точку входа на HTTP. Проверка осуществлялась по очень простой схеме, скрипт смотрит откуда производится аутентификация на сервер, и пропускает запрос только в том случае, когда он был послан с головной страници сайта. То-есть если производить аутентификацию к примеру сразу на страницу "http://www.myjob/job/regme/&?regnew/" то скорей всего она не пройдёт. В данном случае, нужно будит сначала войти на головную страницу "http://www.myjob/" после чего пробовать уже запрос аутентификации.. "http://www.myjob/job/regme/&?regnew/"

Автор: dihlofose 13.4.2006, 16:33
Redstorm, спасибо за ответ...
Если возможно, уточни по поводу входа на главную страницу. Как я понял вход осуществляется методом get. Так и сделал, но результат опять такой же. Если несложно, посмотри код, скорее всего я чего-то не догоняю:
Код

var
  LongStr     : AnsiString;
  StringList  : TStringList;
  str         :string;
begin
   with IdHTTP1 do
   begin
     StringList := TStringList.Create;
     Params := TStringStream.Create('');
     StringList.Add('login=Логин');
     StringList.Add('password=Пароль');
     Request.AcceptLanguage := 'ru';
     Request.Referer := 'http://www.rabota.mail.ru';
     Request.ContentType := 'application/x-www-form-urlencoded';
     Request.Connection := 'Close';
     Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; InfoPath.1)';
     Request.Pragma := 'no-cache';
     idHttp1.CookieManager := IdCookieManager1;
     IdHTTP1.Get('http://www.rabota.mail.ru');
     try
       str := IdHTTP1.Post('http://www.rabota.mail.ru/content/account/login/login.html', StringList);
     finally
     begin
       Memo1.Text := str;
       Memo1.Lines.SaveToFile('C:\mail.html');
       StringList.Free;
     end;

  end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)