![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть рабочая процедура авторизации на сайт.
Код:
procedure TForm1.btn1Click(Sender: TObject); var stream: TStringStream; http1: THTTPSend; httpsend: THTTPSend; TOKEN:string; begin httpsend:=THTTPSend.Create; http1:=THTTPSend.Create; http1.HTTPMethod('get','https://my.kyivstar.ua/tbmb/login/perform.do'); mmo3.Lines.LoadFromStream(http1.Document); TOKEN:=Copy(mmo3.Text, Pos('org.apache.struts.taglib.html.TOKEN', mmo3.Text)+44, 32); edt1.Text:=TOKEN; stream:=TStringStream.Create(''); stream.WriteString('org.apache.struts.taglib.html.TOKEN='+TOKEN+'&isSubmitted=true&USERNAME=&USER_NAME=&ORIG_URL=&isInetUser=null&buser=&bpath=&user=%2B38'+edt2.Text+'&password=435465&Submit=%C2%F5%B3%E4+%E2+%F1%E8%F1%F2%E5%EC%F3&value%28jumpTo%29=&value%28jumpToUrl%29='); httpsend.MimeType:='application/x-www-form-urlencoded'; httpsend.Document.LoadFromStream(stream); if httpsend.HTTPMethod('post','https://my.kyivstar.ua/tbmb/login/perform.do') then begin mmo1.Lines.Add('-----------------------------'); mmo1.Lines.Add('http.ResultCode='+IntToStr(httpsend.ResultCode)); mmo1.Lines.Add('-----------------------------'); mmo1.Lines.Add('http.Cookies.Text='+(httpsend.Cookies.Text)); mmo1.Lines.Add('-----------------------------'); mmo1.Lines.Add('http.Headers.Text='+(httpsend.Headers.Text)); mmo1.Lines.Add('-----------------------------'); mmo1.Lines.Add('http.MimeType='+httpsend.MimeType); mmo1.Lines.Add('-----------------------------'); mmo2.Lines.LoadFromStream(httpsend.Document); end; end; После успешной авторизации происходит редирект, необходимо выловить и отобразить в memo html-код страницы, на которую средиректило. Нашел в интернете следующую функцию, которая с виду реализует то, что мне нужно. Код:
function GetHTML(URL: string): RawByteString; var Synapse: THTTPSend; NewUrl: string; n: integer; FStream: TMemoryStream; temp: RawByteString; begin Synapse := THTTPSend.Create; try try if Synapse.HTTPMethod('GET', URL) then begin case Synapse.Resultcode of 301, 302, 307: begin n := FoundLocationStrNum(Synapse.Headers, 'Location: '); if (n >= 0) and (n <= Synapse.Headers.count-1) then begin NewUrl := StringReplace(Synapse.Headers.Strings[n],'Location: ','', [rfIgnoreCase]); result := GetHTML(NewUrl); end; end; 200: begin FStream := TMemoryStream.Create; try FStream.LoadFromStream(Synapse.Document); temp := StreamToRawByteString(FStream); SetCodePage(temp, 65001, false); Result := temp; finally FStream.Free; end; end; end; end; except end; finally Synapse.Free; end; end; Только вот если её по живому вставить в тело прогрммы – при компиляции выпрыгует кучу ошибок, которые ругаются на: [Error] Unit1.pas(39): Undeclared identifier: 'RawByteString' [Error] Unit1.pas(56): Undeclared identifier: 'FoundLocationStrNum' [Error] Unit1.pas(69): Undeclared identifier: 'StreamToRawByteString' И так далее… Я что-то не подключил? Или не поставил какой-то компонент? |
#2
|
||||
|
||||
![]() Цитата:
|