Есть программа, использующая WinHTTP.
нужно, чтобы она сама разбиралась с интернет соединением.
На машине с прокси отправка запросов не работает.
т.е. флага WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, передаваемого в WinHttpOpen, похоже не достаточно.
интересует, как сделать универсально ф-ию отправки запроса, которая бы сама разбиралась бы с интернет соединением.
нашел ф-ии WinHttpGetIEProxyConfigForCurrentUser, WinHttpGetProxyForUrl
Интересует что делать, в зависимости от их возвращаемого значения.
Итак, то, что пока делал:
вызываю WinHttpGetIEProxyConfigForCurrentUser
на машине без прокси она возвращает полностью 0-ю структуру WINHTTP_CURRENT_USER_IE_PROXY_CONFIG(без ошибок, т.е. ф-я возвращает TRUE).
как я понимаю, это значит, что можно смело использовать флаг WINHTTP_ACCESS_TYPE_NO_PROXY?
прокси нет. ставлю флаг "Автоматическая настройка параметров" в IE.
теперь fAutoDetect = 1.
что, если такая ситуация? или она эквивалентна установке флага WINHTTP_ACCESS_TYPE_DEFAULT_PROXY в WinHttpOpen?
т.е. нужно ли как-то обходиться с этим флагом?
вызываю WinHttpGetProxyForUrl с параметрами:
WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions = {0};
autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
autoProxyOptions.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
возвращает ERROR_WINHTTP_AUTODETECTION_FAILED(12180). это результат отсутствия прокси или этот флаг вообще к прокси не относиться?
кроме того эта ф-я возвращаеться не сразу. почему? она лезет нет(время задержки около 0.5-1 сек)?
в случае успеха — вызываю WinHttpSetOption с возвращаемым значением прокси(WINHTTP_PROXY_INFO структура).
далее, если lpszAutoConfigUrl не пустая. как я понял — это сценарий автоматической настройки.
делаю такой файл my_proxy.pac:
function FindProxyForURL(url, host)
{
return "PROXY 148.233.239.24:80";
}
прокси взят с нета. рабочий(проверял, через установку напрямую).
ставлю его в настройках IE.
вызываю WinHttpGetProxyForUrl с параметрами:
WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions = {0};
autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
autoProxyOptions.lpszAutoConfigUrl = ieProxyConfig.lpszAutoConfigUrl;
возвращает ошибку ERROR_INTERNET_UNRECOGNIZED_SCHEME(12006), что не так?
далее, ставлю адресс+порт рабочего прокси в настройки IE.
lpszProxy заполнен.
устанавливаем прокси с помощью WinHttpSetOption. все работает нормально.
также, как я понимаю может быть lpszAutoConfigUrl и lpszProxy, здесь уже пробовать самому? т.е. если не удаеться послать запрос — меняем прокси.
И какие еще могут быть варианты с прокси. достаточно ли настроек IE?