Форум: "Сети";
Текущий архив: 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