Здравствуйте, Аноним, Вы писали:
А>Привет.
А>Тут такая проблема: есть некоторое количество браузеров, надо каждому из них привязать свой прокси.
А>Я так понимаю что тут надо использовать функцию 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 и все будет Ок!