Задать вопрос

Как отправлять запрос по https от авторизированного пользователя?

Есть сайт, работающий по протоколу https. Нужно получить содержимое страницы этого сайта, как авторизированный пользователь.

Код сайта, отвечающий за процедуру авторизации известен.
<form id="fm1" class="fm-v clearfix" action="/cas/login?..............
<input id="username" name="username".............
<input id="password" name="password"................
<input type="hidden" name="lt" value="LT-119266-9dAAvjJj9JJAMhjCf2cHVScDuKi4Fj" />
<input type="hidden" name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="login"/>

Адрес сайта известен rmisssite.ru/cas/login
Библиотеки в проект Delphi 7 добавлены.

Процедура ниже получает содержимое страницы, как обычный пользователь. Все работает.
Показывает код страницы как не авторизированный пользователь.
procedure get_https_file_content_to_memo(https_url:string);
var
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket;
server_response:string;
text_file: textfile;
begin
//Кодируем url- ведь бывает url с параметрами, где есть кириллица
https_url:=AnsiToUtf8(https_url);
https_url:=TIdURI.URLEncode(https_url);
 
IdHTTP1:=TIdHTTP.Create(nil);
IdHTTP1.HandleRedirects:=true;
IdHTTP1.RedirectMaximum:=15;
 
IdSSLIOHandlerSocket1:=TIdSSLIOHandlerSocket.Create(IdHTTP1);
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv1;
IdHTTP1.IOHandler:=IdSSLIOHandlerSocket1;
server_response:=utf8toansi(IdHTTP1.Get(https_url));
IdSSLIOHandlerSocket1.Destroy;
IdHTTP1.Destroy;
//Выводим ответ в поле мемо
form1.memo1.Lines.Add(server_response);
end;


Процедура ниже должна авторизироватся и запрашивать код страницы - уже как авторизированный пользователь. написана на основе процедуры выше. Но не работает как надо - выводит код страницы авторизации. Т.е. авторизация не прошла и нас вернули к вводу логина и пароля.
procedure TForm1.Button2Click(Sender: TObject);
var
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket;
server_response,https_url:string;
params:tstringlist;
CM:TidCookieManager;
begin
form1.Memo1.Clear;

//Лист наших параметров - что будем передавать сайту
params:=TStringList.Create;
params.Add('username=petrov_aa');
params.Add('password=1234567');
params.Add('execution=e1s1');
params.Add('_eventId=login');
params.Add('lt=LT-122030-HXG4k4TRkxqPDfgTr2iALl'); //Параметр постоянно меняется (

//Адрес сайта - куда будем передавать
https_url:='https://rmisssite.ru/cas/login';

//Создание и настройка соединения
https_url:=AnsiToUtf8(https_url);
https_url:=TIdURI.URLEncode(https_url);
IdHTTP1:=TIdHTTP.Create(nil);
IdHTTP1.HandleRedirects:=true;
IdHTTP1.RedirectMaximum:=15;

//В интернете пишут, что нужно хранить куки
CM := TidCookieManager.Create(IdHTTP1);
IdHTTP1.AllowCookies := true;
IdHTTP1.CookieManager := CM;

IdSSLIOHandlerSocket1:=TIdSSLIOHandlerSocket.Create(IdHTTP1);
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv1;
IdHTTP1.IOHandler:=IdSSLIOHandlerSocket1;

//Авторизация
server_response:=utf8toansi(IdHTTP1.Post(https_url,params));
//Мы ведь авторизированы? Теперь нужно получить содержимое "закрытой" страницы
server_response:=utf8toansi(IdHTTP1.Get('https://rmisssite.ru/edit/363'));
//server_response:=utf8toansi(IdHTTP1.Post('https://rmisssite.ru/edit/363',params)); А может так надо??

//Все сделано - уничтожаем объекты
IdSSLIOHandlerSocket1.Destroy;
IdHTTP1.Destroy;
params.free;

//Код страницы выводим в мемо
form1.memo1.Lines.Add(server_response);

end;


Как отправлять запрос по https от авторизированного пользователя? Какие ошибки вы видите в процедуре выше?
  • Вопрос задан
  • 698 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы