Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

Работа с 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
15-1158296027
MBo
2006-09-15 08:53
2006.10.08
Дюжина несложных пятничных задачек


1-1156420386
gear
2006-08-24 15:53
2006.10.08
Как скрыть кнопку на панели задач у вторичной формы, если для ней


15-1158559506
Stexen
2006-09-18 10:05
2006.10.08
соглашение о передаче параметров


15-1158129080
DelphiLexx
2006-09-13 10:31
2006.10.08
Delphi 2006 выдает ошибку


15-1158413367
Yegorchic
2006-09-16 17:29
2006.10.08
Что это за композиция?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский