Re: IWebBrowser2 + Proxy
От: mitchmen  
Дата: 24.02.07 22:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет.

А>Тут такая проблема: есть некоторое количество браузеров, надо каждому из них привязать свой прокси.
А>Я так понимаю что тут надо использовать функцию UrlMkSetSessionOption.
А>Но она вешается на текущую сессию. В какой момент или при каком событии надо её использовать?
А>Пробовал перед началом навигации и при DISPID_BEFORENAVIGATE2 не получается, скорее что то происходит, но навигация обрывается ошибкой
А>, что то типа "не могу загрузить страницу".

А>Использую такой метод:

А>HRESULT CClickRAgentFrame::SetProxyInfo(CString csProxyAddress, long lProxyPort, CString csProxyLogin, CString csProxyPassword)
А>{
А> INTERNET_PROXY_INFO ipi;
А> ipi.lpszProxyBypass = NULL;

А> char strPort[33] = {0};

А> ltoa(lProxyPort,strPort,10);

А> if( csProxyAddress.IsEmpty() )

А> {
А> ipi.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
А> ipi.lpszProxy = NULL;
А> }else{
А> CString csProxy = "";
А> if( !csProxyLogin.IsEmpty() )
А> csProxy = csProxyLogin + ":" + csProxyPassword + "@";

А> csProxy = csProxy + csProxyAddress + ":" + CString(strPort);


А> ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY;

А> ipi.lpszProxy = csProxy;
А> }
А> return UrlMkSetSessionOption(INTERNET_OPTION_PROXY,(LPVOID)&ipi,sizeof(INTERNET_PROXY_INFO),0);
А>}

А>Пробовал использовать InternetSetOption, но он вешает гобальный прокси если HINTERNET = NULL, тогда возникла проблема как получить

А>соединение которое использует IWebBrowser2.
А>Короче я мучаюсь в догатках что делать с этим.
А>Помогите.



Блин, тема старая, но актуальная не нагуглил нигде ответа на данный ворос, но чудом сам смог его решить.
а солюшн такой.
Я думаю у топикстартера UNICODE билд его проекта (т.к. вытащил код из не юникодного проекта у себя, вставил в юникодный и он там перестал работать именно с такими симптомами.) Я думаю проблема в том, что попросту эта функа не понимает юникодных строк и читает из поля lpszProxy всего один символ, я думаю понятно всем почему. И именно по этому после установки прокси с помощью URLMkSetSessionOption IE бажит.
а именно — когда пытаешся сделать ему навигейт — то все обламывается с ошибкой Can't locate web page или че то в этом духе.
так вот, решается это следующим образом.
Если приложение юникодное — то просто определяем структуру:
typedef struct {
DWORD dwAccessType;
char * lpszProxy;
char * lpszProxyBypass;
} XINTERNET_PROXY_INFO, * LPXINTERNET_PROXY_INFO;
чтобы в ней строки были не юникодными и передаем ее в параметры URLMkSetSessionOption и все будет Ок!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.