WinHTTP и proxy
От: sidorov18 США  
Дата: 16.10.09 13:54
Оценка:
Есть программа, использующая 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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.