INTERNET_OPTION_IGNORE_OFFLINE от Wininet не работает? - PullRequest
1 голос
/ 23 октября 2008

Я пытаюсь заставить Wininet игнорировать режим «Работа в автономном режиме» Internet Explorer как для HTTP, так и для FTP.

Так что я пытаюсь использовать InternetSetOption() с INTERNET_OPTION_IGNORE_OFFLINE. Документация гласит: «Это используется InternetQueryOption и InternetSetOption с дескриптором запроса». Однако вы не можете получить дескриптор запроса, потому что если IE находится в автономном режиме работы, то InternetConnect() всегда будет возвращать нулевой дескриптор. Без дескриптора соединения вы не можете получить дескриптор запроса. Поэтому я попытался использовать его с ручкой InternetOpen() и ручкой NULL. Оба потерпели неудачу с ERROR_INTERNET_INCORRECT_HANDLE_TYPE.

Есть ли способ заставить эту опцию работать? Я нашел ссылку на группу новостей MS с 2003 года, что INTERNET_OPEN_TYPE_PRECONFIG "сломан". 5 лет спустя с IE8 beta 2, и они до сих пор не исправили это? Или я делаю это неправильно.

Редактировать
Я был не совсем прав. InternetConnect() всегда возвращает ноль, если вы находитесь в режиме «Работа в автономном режиме» и используете FTP, но возвращает действительный дескриптор, если вы используете Http. Тем не менее, он по-прежнему не работает даже с дескриптором запроса.

Если для меня установлено «Работа в автономном режиме», и я звоню

BOOL a = TRUE;
::InternetSetOption(hData, INTERNET_OPTION_IGNORE_OFFLINE, &a, sizeof(BOOL));

на ручке от

HINTERNET hData = HttpOpenRequest(hInternet, L"POST", path, NULL, NULL, NULL, flags, 0 );

вызов InternetSetOption() успешен.
Тем не менее, вызов HttpSendRequest() все еще не удается с кодом ошибки 2 (файл не найден), так же, как и если я не установил параметр.
То же самое, если я позвоню

::InternetSetOption(hData, INTERNET_OPTION_IGNORE_OFFLINE, 0, 0);

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Я проверил использование INTERNET_OPTION_IGNORE_OFFLINE с версией WinInet для IE 9, и, похоже, она работает.

Убедитесь, что вы вызываете InternetSetOption до , вы вызываете HttpOpenRequest и вместо этого передаете дескриптор hInternet. Опция должна быть установлена ​​до того, как запрос действительно будет отправлен на сервер. HttpOpenRequest

+++ Рик ---

0 голосов
/ 23 января 2009

Вы пробовали GET вместо POST, который отправляет дополнительные данные в заголовках?

Например, в REST-ful API POST-запрос эквивалентен Create, Update, Delete и GET to Read, что может нарушить автономный режим. Просто угадай ...

...