Поймать адрес браузера, прежде чем он будет передан на прокси - PullRequest
0 голосов
/ 29 декабря 2011

Я пишу BHO (Browser Helper Object), который ловит адрес, который вводит пользователь, проверяет его, и в зависимости от результата выполняет кретиновую операцию.

BHO подключается к событиям браузера, а затем я ловлю событие DISPID_BEFORENAVIGATE2 и делаю свои вещи.

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

Кто-нибудь знает, как я могу поймать адрес до того, как меня направят на прокси-сервер?

1 Ответ

0 голосов
/ 08 января 2012

Я нашел решение для этого. Я получал URL-адрес от объекта браузера, так что на самом деле я получал отображаемую страницу и, поскольку прокси-сообщение было перенаправлением, оно никогда не отображалось, поэтому я его никогда не видел.

Теперь я переключился на получение URL-адреса из параметров DISPID_BEFORENAVIGATE2:

LPTSTR CBhoApp::varToStr(VARIANT var)
{
    USES_CONVERSION;
    if(var.vt == VT_BSTR)
    {
        LPTSTR psz = new TCHAR[SysStringLen(var.bstrVal)];
        lstrcpy(psz, OLE2T(var.bstrVal));
        return psz;
    }
    else
        return NULL;
}
STDMETHODIMP CBhoApp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{

    BSTR bstrUrlName;
    LPTSTR psz;
    if(dispidMember == DISPID_BEFORENAVIGATE2)
    {
        //This is the parameter for the URL.
        VARIANT* tmp = pDispParams->rgvarg[5].pvarVal;
        psz = varToStr(*tmp);
        .
        .
        .
    }
}
...