Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу разобраться с WebBrowser... 
:(
    Опции темы
eViperEA
Дата 18.3.2008, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Вот написал код ... для авто регистрации ... как мне сделать так чтоб все действия отображались в WebBrowser... 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl,
  IWTreeview, OleCtrls, SHDocVw, IdCookieManager;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    WebBrowser1: TWebBrowser;
    IdCookieManager1: TIdCookieManager;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://forum.trktvs.ru/index.php?t=index&') ;
memo1.lines.savetofile('c:\test.html');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://forum.trktvs.ru/index.php?t=index&') ;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
begin
S:= TStringList.Create;
S.Add('login=eViper');
S.Add('password=xxx');
S.Add('SQ=0');
S.Add('adm=');
memo1.Text:=IdHTTP1.Post('http://forum.trktvs.ru/index.php?t=login&', S);
memo1.lines.savetofile('c:\test.html');
end;

end.

Тоесть получается так.. На кнопку нажимаю выполнить.. он логинится и сохраняет файл что залогинился .. нажимаю на кнопку проверить (button2) он отображает что не залогинился а сохнанение в файле делает что залогинился ...  smile 

Это сообщение отредактировал(а) eViperEA - 18.3.2008, 07:01

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  V1.rar 3,76 Kb
PM MAIL   Вверх
MetalFan
Дата 18.3.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



eViperEA, а при чем тут Indy и IWebBrowser? надо видимо "ловить" в Indy печеньки и передавать WebBrowser'у


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
eViperEA
Дата 18.3.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



я искал в DRKB там про куки менеджер нету ниче smile 
Я не знаю как "отловить" куки...  smile 

Это сообщение отредактировал(а) eViperEA - 18.3.2008, 10:02
PM MAIL   Вверх
eViperEA
Дата 26.3.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Я все еще пытаюсь понять как мне передать куки в WebBrowser 
Код

uses
   Registry;

 function GetDirectory: string;
 var
   reg : TRegistry;
 begin
   reg := TRegistry.Create;
   try
     reg.RootKey := HKEY_LOCAL_MACHINE;
     reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\Special Paths\Cookies',
       False);
     Result := reg.ReadString('Directory');
   finally
     reg.Free;
   end;
 end;


 procedure TForm1.Button1Click(Sender : TObject);
 var
   s : string;
 begin
   S := GetDirectory;
   ShowMessage(GetDirectory);
 end;

Он вроде находит дерикторию куков но как их присвоить webbrowser'y?
PM MAIL   Вверх
MetalFan
Дата 26.3.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



"отловить" куки не сложно.
вариант 1. подключить кукименеджер и посмотреть, что просиходит в OnNewCookie
вариант 2. посмотреть самому в ResponseHeader'е поле set-cookie.
добавить куку в ослика тоже не сложно.
выкладывал я тут свой компонент на основе WinInet, там есть класс, работающий с кэшом ослика, в котором также лежат и куки.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
eViperEA
Дата 26.3.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



С первым способом я не разобрался ..( когда я нажимаю 2а раза на он нью куки у меня появляется процедура ... 
Код

procedure TForm1.IdCookieManager1NewCookie(ASender: TObject;
  ACookie: TIdCookieRFC2109; var VAccept: Boolean);
begin

end;

в которой он не переваривает почему то TIdCookieRFC2109.
со вторым тоже не очень .. Пробовал в нете поискать (google.ru) 
нашел 
Код

procedure Auth;
var RequestHeader: TStringList;
var ResponseHeader: TStringList;
var Location: string;
var S: string;
var TCP: TIdTCPClient;
var Cookies: TstringList;
var Browser: TstringList
var Login,Domain,Nick,Password,Room: string;
begin

Login:=Edit3.Text;
Domain:=ComboBox1.Text;
Nick:=Edit4.Text;
Password:=Edit5.Text;
Room:=Edit6.Text;

TCP:=TIdTCPClient.Create(nil);
RequestHeader:=TStringList.Create;
ResponseHeader:=TStringList.Create;
Cookies:=TStringList.Create;
Browser:=TStringList.Create;

TCP.Port:=80;

Cookies.Clear;

Browser.Clear;
Browser.Append('User-Agent=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.5; en) Opera 12.50');
Browser.Append('Cookie2=$Version=1');

// Первый запрос на сервер

ResponseHeader.Clear;
RequestHeader.Clear;
RequestHeader.AddStrings(Browser);
RequestHeader.Append('Content-Type=application/x-www-form-urlencoded');
RequestHeader.Append('Host=my.chat.mail.ru');
RequestHeader.Append('Referer=http://chat.mail.ru/');
S:='page=http%3A%2F%2Fchat.mail.ru%2F&FailPage=http%3A%2F%2Fchat.mail.ru%2Fdata-xml%2Ferlogin.html &enter=1812&mra=&mra_status=&Login='+Login+'&Domain='+Domain+'&Password='+ Password+'&nick='+Nick+'&nickcolor=0&textcolor=0&roomleft=&room='+Room+'&';
RequestHeader.Append('Content-Length='+IntTostr(Length(S)));
RequestHeader.AddStrings(Cookies);

TCP.Host:='my.chat.mail.ru';
TCP.Connect;
TCP.WriteLn('POST /cgi-bin/auth HTTP/1.0');
TCP.WriteHeader(RequestHeader);
TCP.WriteLn(S);

TCP.ReadStrings(TStrings(ResponseHeader));

// Проверка куков и идентификация на сервере.

RequestHeader.Clear;
RequestHeader.AddStrings(Browser);
RequestHeader.Append('Referer=http://my.chat.mail.ru/cgi-bin/auth');
RequestHeader.Append('Content-Type=text/html');

ExtractHeader(ResponseHeader,Cookies,Location);
ResponseHeader.Clear;
RequestHeader.AddStrings(Cookies);

TCP.Connect;
TCP.WriteLn('GET '+Location+' HTTP/1.0');
TCP.WriteHeader(RequestHeader);

TCP.ReadStrings(TStrings(ResponseHeader));

Cookies.Append('Cookie=Login='+Login+'; Domain='+Domain+'; nick='+Nick+'; nickcolor=0; textcolor=0; room='+Room+'; silent=0; signore=0');

RequestHeader.Clear;
RequestHeader.AddStrings(Browser);
RequestHeader.Append('Referer='+Location);
RequestHeader.Append('Content-Type=text/html');
ExtractHeader(ResponseHeader,Cookies,Location);
ResponseHeader.Clear;
RequestHeader.Append(InlineCookie(Cookies));

TCP.Connect;
TCP.WriteLn('GET '+Location+' HTTP/1.0');
TCP.WriteHeader(RequestHeader);
TCP.ReadStrings(TStrings(ResponseHeader));

S:=ResponseHeader.Text;
Delete(S,1,pos('<h2>',S)+3);
Delete(S,pos('</h2>',S),length(S));

if (S <> '') then ;// Обработчик ошибок
RequestHeader.Free;
ResponseHeader.Free;
Cookies.Free;
Browser.Free;
TCP.Free;
end;

procedure ExtractHeader(Header: TStringList; var Cookies: TStringList; var Location: string);
var I: integer;
var S: string;
begin
Location:='';
I:=0;
while (Header[I] <> '') do
begin
S:=Header[I];
if (pos('Set-Cookie:',S) = 1) then
begin
Delete(S,1,12);
Delete(S,pos(';',S),length(S));
if (Length( copy(S,pos('=',S)+1,length(S))) > 0) then
Cookies.Append('Cookie='+S);
end;
if (pos('Location:',S) = 1) then
begin
Delete(S,1,10);
Location:=S;
end;
inc(I);
end;

end;
function InlineCookie(Cookies: TStringList): string;
var I: integer;
var S: string;
begin
Result:='Cookie=';
for I:=0 to Cookies.Count-1 do
begin
S:=Cookies[I];
Delete(S,1,7);
Result:=Result+S+'; ';
end;
end;

как тут "ловить"  smile 
добавить куку в ослика тоже не сложно.  Мне прийдется работать с IE или можно в программе вставлять? в WebBrowser? smile 
А с твоим компонентом нужно еще разбираться (буду стараться)...(с первого забега ниче не понял... придется долго вникать smile ) smile  
PM MAIL   Вверх
eViperEA
Дата 27.3.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



с первой проблемой разобрался надо было просто в uses добавить IdCookie
А дальше пока не могу понять...(
PM MAIL   Вверх
MetalFan
Дата 27.3.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



смотри в моем компоненте юнит WinInet_WrapperClasses класс  TMFWinInetCacheList


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
eViperEA
Дата 27.3.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Я нашел эту строчку...( Сложно понять smile 
Смотрел пример почти ничего не понял ...( 
Как мне этим воспользоваться не представляю... 
Поясни пожалуйсто ато голова кипит...
PM MAIL   Вверх
eViperEA
Дата 31.3.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Вот нашел как добавлять куки но не знаю по чему у меня он не хочет работать ... 
Код

procedure TwebDispatcher.WebAction(Sender: TObject; Request: TWebRequest; 
  Response: TWebResponse; var Handled: Boolean);
begin
  with (Response.Cookies.Add) do
  begin
    name := 'TESTNAME';
    Value := 'TESTVALUE';
    Secure := False;
    Expires := Now;
    Response.Cookies.WebResponse.SendResponse;
  end;
end;

Подчеркивает WebAction, TWebRequest, TWebResponse, name, Value, Secure, Expires, Cookie.Add,  
Cookies.WebResponse.SendResponse
Помогите пожалуйста...
PM MAIL   Вверх
MetalFan
Дата 31.3.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



кто такой WebDispatcher?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
eViperEA
Дата 31.3.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



ok поставил его на форму=) сори 
но WebAction все равно подчеркивает smile 
PM MAIL   Вверх
eViperEA
Дата 31.3.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Написал вот так ...
 
Код

procedure TForm1.WebDispatcher1WebActionItem1Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
with (Response.Cookies.Add) do
  begin
    name := 'TESTNAME';
    Value := 'TESTVALUE';
    Secure := False;
    Expires := Now;
    Response.Cookies.WebResponse.SendResponse;
  end;
end;

теперь как с помощью этого из HTTP в веб кинуть ... Помогите мне я разобраться никак не могу..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.