Робота з cookie в компоненті TWebBrowser (зчитування, учтановка)
Ось виникло питання стосується 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;
# XA0; var
# XA0; # XA0; i: integer;
begin
# XA0; Result: = VarArrayCreate ([0, Length (S) - 1], varByte);
# XA0; for i: = 1 to length (S) do
# XA0; # XA0; Result [i-1]: = ord (S [i]);
end;
Ви підсумку все повинно бути як в шоколаді але, ніфіга не працює :-), ні тільки з куками але і з PostData.
Думаю дана статейка буде цікава, може ви помітите що я роблю не так?
п.с. Тестування проводжу на локальному компі, встановлений апач. Скрипт readcockie.php відображає вміст COOKIE і POST масивів.
П.П.С. Установку кукисов через компонент IdHTTP можна зробити банально через header і думаю там буде працювати, правда я поки особисто не тестіл, але є пости в інеті що дана конструкція працює Мені ж бажано рішення з TWebBrowser
Ось з проблемою вже взагалі розібрався, типу вже локалізована Помилка саме з Cookie інші властивості змінюються без проблем. Такі як User-Agent і Referer тестував особисто.
Вопросси, як міняти Cookie?
ІМХО: Як я зрозумів у компонента TWebBrowser-а як і у самого Delphi купа глюків! Блін як можна було зробити компонент не давши користувачеві можливість передавати кукіси? Єдине пояснення то що Борланд як і Біл взагалі знахабнів!
Тепер по суті, раз у TWebBrowser-а немає можливості редагувати тег cookie то виходить протягнути користуватися стороннім компонентом, наприклад IdHTTP який з цим добре справляється. А результат довантажувати в TWebBroser. Тепер питання, як можна отримати вміст GET, POST, Header запиту. Все треба обробляти на BeforeNavigate, але як зчитувати дані?
Заздалегідь вдячний за будь-яку пораду
Ребята помогите вже з останньою частиною проблеми. Після тривалих мук і читання MSDN прийшов до висновку що все таки можна управляти будь через:
(WebBrowser1.Document as IhtmlDocument2) .cookie
але за однієї умови, кука повинна бути передана до того як її почнемо редагувати. А саме, якщо я відриваю якийсь урл який встановлює куку то після цього і тільки після цього її можна редагувати (підміняти або змінити).
Але якщо кука зберігатися і мені її відредагувати до запиту то виникають проблеми. Спроба відредагувати на подію Beforenavigate закінчилося невдачею так як на цьому етапі WebBrowser1.Document взагалі не існує
Що б WebBrowser1.Document існував я спробував спочатку відкрити документ about: blank і тільки після цього відредагувати куку але нічого не вийшло :-(
Може хто що порадить
Пам'ять: 0.74 MB
Час: 0.043 c