Как получить мою реализацию IHttpNegotiate, вызванную IWebBrowser? - PullRequest
1 голос
/ 12 сентября 2010

Я использую код cwebpage_src , и мне нужно обновить заголовки HTTP-запросов при нажатии на ссылки.Как я понимаю, это можно сделать с помощью собственной реализации IHttpNegotiate-> BeginTransaction.Но как получить мою реализацию IHttpNegotiate под названием ??

Спасибо!

1 Ответ

2 голосов
/ 14 сентября 2010

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

Подробная информация о том, как и зачем это делать, разбросана по сети в разных местах, но лучшая экспозиция, которую я прочитал, находится в этом посте Игорь Тандетник (сокращено здесь для краткости):

Есть несколько технологических слоев которые поддерживают загрузку и навигация в Internet Explorer и Веб-браузер управления. На вершине есть это сам WebBrowser и объект MSHTML который обеспечивает разбор HTML и рендеринг. Клиент использует такой интерфейсы как IWebBrowser2 и IHTMLDocument2 для связи с эти высокоуровневые объекты.

WebBrowser и MSHTML используют URL Monikers библиотека для выполнения актуальных загрузок. URLMon предоставляет свои услуги через Интерфейсы IMoniker и IBinding, и клиент (скажем, MSHTML) реализует IBindStatusCallback и ряд связанные интерфейсы, например IHttpNegotiate или IAuthenticate.

Далее идет асинхронный плагин Обработчик протокола. Приложение инкапсулирует детали конкретного протокола, например http, file или res.

...

В большинстве случаев это приложение размещение элемента управления WebBrowser (или BHO работает внутри IE) использует высокий уровень услуги, предоставляемые WebBrowser и Объекты MSHTML. Однако иногда эти услуги недостаточны, и требуется крючок нижнего уровня.

...

Было бы неплохо иметь возможность зацепить в последовательность связи между WebBrowser / MSHTML и URL Monikers. К сожалению, есть кажется, нет никакого способа сделать это - в по крайней мере, ничего из того, что я знаю. Итак, мы посмотрите на следующий уровень - связь между URL-прозвищем и приложение.

...

Теперь редко нужно реализовать полномасштабное приложение от царапина - ведь как часто делают новые протоколы на самом деле определены? Но для наших целей полезно реализовать так называемое сквозное приложение (Papp). PApp - это объект, который реализует обе стороны URL связь между моникером и приложением, то есть он реализует как IInternetProtocol и IInternetProtocolSink / IInternetBindInfo. Мы регистрируем это как временный обработчик для стандарта протокол, такой как HTTP. Теперь всякий раз, когда HTTP-запрос должен быть отправлен, URL Моникер создаст экземпляр нашего pAPP и попроси его сделать работу. Затем pAPP создает экземпляр стандартное приложение для протокола в вопрос (я называю это целевым приложением, или Тап, но помни, что я изобрел сама терминология, это не общепринятые, предложения по лучше соглашение об именах приветствуются) и действует как его клиент. С этой точки зрения, наш pAPP становится общеизвестным человек посередине. В самом простом случай, любой вызов метода, сделанный URL Моникер на pAPP пересылается на tAPP, и любой вызов метода, сделанный TAPP на pAPP пересылается обратно на URL Moniker. ПАПП получает возможность наблюдать и, если желательно, изменить каждый бит информация, относящаяся к этому запросу проходя вперед и назад между Моникер и тап.

У Игоря есть несколько примеров проектов, которые должны помочь написать ваш pAPP:

...