Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Работа с cookie в компоненте TWebBrowser (считывание, учтановка)   Найти похожие ветки 

 
Delphi5.01 ©   (2006-05-14 06:00) [0]

Здравствуйте,

Вот возник вопрос касающийся cookie и компонента TWebBrowser.
Мой вопрос состоит из двух частей

1) Первая часть касается получению кукисов
2) Вторая часть - передача/установка кукисов до открытия странички


Первую часть вопроса решил, в интернете было достаточно документации как можно считать кукис воспользовавшись OLE интерфейс, а именно

myCookie := (WebBrowser1.Document as IhtmlDocument2).cookie;

Вот вторая часть намного сложней. Долго искав пришел вот к такому выводу, раз кука передается через header то ее надо добавить туда до запроса в ручную, а именно:

Headers := StringToVarArray("COOKIE: test_cookie=123456789"#13#10);

Функция StringToVarArray нужна для превращения String в Variant тип. Код функции очень простой:

function StringToVarArray(const S: string): Variant;
 var
   i: integer;
begin
 Result := VarArrayCreate([0, Length(S) - 1], varByte);
 for i := 1 to length(S) do
   Result[i-1] := ord(S[i]);
end;


Вы итоге все должно быть как в шоколаде но, нифига не работает :-), ни только с куками но и с PostData.

procedure TForm1.Button2Click(Sender: TObject);
 var
   Headers: OleVariant;
   PostData: OleVariant;
begin
 Headers := StringToVarArray("COOKIE: test_cookie=fuck_you_all"#13#10);
 PostData := StringToVarArray("good=fucking&bad=working"#13#10);
 Edit2.Text := Headers;
 WebBrowser1.Navigate("http://my-local-domain.com/readcockie.php",
   EmptyParam, EmptyParam, PostData, Headers);
end;


Думаю данная статейка будет интересна, может вы заметите что я делаю не так?

http://www.delphifaq.com/faq/delphi/network/f249.shtml

п.с. Тестирования провожу на локальном компе, установлен апач. Скрипт readcockie.php отображает содержимое COOKIE и POST массивов.

п.п.с. Установку кукисов через компонент IdHTTP можно сделать банально через header и думаю там будет работать, правда я пока лично не тестил, но есть посты в инете что данная конструкция работает Мне же желательно решение с TWebBrowser


 
Delphi5.01 ©   (2006-05-14 18:07) [1]

Только что проверил снифером содержимое пакетов, и что вы думаете, ни команда:
procedure TForm1.Button2Click ...
...
begin
...
 Headers := StringToVarArray("COOKIE: test_cookie=work"#13#10);
 WebBrowser1.Navigate("http://my-domeian.com/readcockie.php",
   EmptyParam, EmptyParam, EmptyParam, Headers);
...
end;

а также команда:
procedure TForm1.WebBrowser1BeforeNavigate2 ...
...
begin
...
 Headers := StringToVarArray("COOKIE: test_cookie=work"#13#10);
...
end;

ничего в хидер не добавляют! Получается что баг у самого компонента? Пытался передавать как простую строку (string) так и конвертированную в OleVariant.
Единственная надежда, управлять содержимым header-а через OLE интерфейс, но как это делать у меня даже идей нет. Может кто подскажет? Нужно через Document или Interface?


 
Доп_инф   (2006-05-14 18:18) [2]

Данный пример у меня вообше отказываеться работать и генерирует ошибку:
http://www.swissdelphicenter.ch/torry/printcode.php?id=2242


 
Тест_рез   (2006-05-14 18:40) [3]

Вот с проблемой уже вообще разобрался, типа уже локализирована Ошибка именно с Cookie остальные свойства меняются без проблем. Такие как User-Agent и Referer тестировал лично.
Вопросс, как менять Cookie?


 
Delphi5.01 ©   (2006-05-15 04:17) [4]

ИМХО: Как я понял у компонента TWebBrowser-а как и у самого Delphi куча глюков! Блин как можно было сделать компонент не дав пользователю возможность передавать кукисы? Единственное объяснение то что Борланд как и Бил вообще обнаглел!

Теперь по сути, раз у TWebBrowser-а нет возможности редактировать тег cookie то получается продеться пользоваться сторонним компонентом, например IdHTTP который с этим хорошо справляется. А результат подгружать в TWebBroser. Теперь вопрос, как можно получить содержимое GET, POST, Header запроса. Все надо обрабатывать на BeforeNavigate, но как считывать данные?

Заранее благодарен за любой совет


 
Delphi5.01 ©   (2006-05-15 17:12) [5]

Ребята помогите уж с последней частью проблемы. После длительных мучений и чтения MSDN пришел к выводу что все таки можно управлять какой через:

(WebBrowser1.Document as IhtmlDocument2).cookie

но при одном условии, кука должна быть передана до того как ее начнем редактировать. А именно, если я отрываю некий урл который устанавливает куку то после этого и только после этого ее можно редактировать (подменять или изменить).

Но если кука храниться и мне ее отредактировать до запроса то возникают проблемы. Попытка отредактировать на событии Beforenavigate закончилось неудачей так как на этом этапе WebBrowser1.Document вообще не существует

Что бы WebBrowser1.Document существовал я попытался сначала открыть документ about:blank и только после этого отредактировать куку но ничего не получилось :-(

Может кто что посоветует



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
2-1158510040
oops
2006-09-17 20:20
2006.10.08
динамический массив


2-1158585885
ЕгкищЗфысфд
2006-09-18 17:24
2006.10.08
из массива в массив


2-1158766989
Image
2006-09-20 19:43
2006.10.08
Кто нибудь знает как сохранить форму вместе со всем содержимым в


3-1155059935
GrandHiew
2006-08-08 21:58
2006.10.08
Вторичный индекс в Paradox


3-1154515859
ttt_111
2006-08-02 14:50
2006.10.08
Поиск по подстроке