Главная страница
    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.46 MB
Время: 0.039 c
2-1158954375
BTR
2006-09-22 23:46
2006.10.08
RICHEDITOM


2-1158835806
GreatMaster
2006-09-21 14:50
2006.10.08
midas.dll


9-1137021348
Buffer
2006-01-12 02:15
2006.10.08
GLScene Buffer Как узнать видна ли такая то точка или нет?


15-1158297469
SergP
2006-09-15 09:17
2006.10.08
Модем и тоновый набор номера...


15-1158557709
Ega23
2006-09-18 09:35
2006.10.08
С Днём рождения! 16 сентября





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский