Wininet 的 INTERNET_OPTION_IGNORE_OFFLINE 不起作用?

发布于 2024-07-07 15:03:20 字数 1307 浏览 13 评论 0原文

我试图让 Wininet 对于 HTTP 和 FTP 忽略 Internet Explorer 的“脱机工作”模式。

因此,我尝试将 InternetSetOption()INTERNET_OPTION_IGNORE_OFFLINE 一起使用。 文档说“这是由带有请求句柄的 InternetQueryOptionInternetSetOption 使用的。” 但是,您无法获取请求句柄,因为如果 IE 处于脱机工作模式,则 InternetConnect() 将始终返回空句柄。 如果没有连接句柄,您将无法获取请求句柄。 所以我尝试将它与 InternetOpen() 句柄和 NULL 句柄一起使用。 两者均失败,并出现 ERROR_INTERNET_INCORRECT_HANDLE_TYPE

有没有办法让这个选项发挥作用? 我在 2003 年的 MS 新闻组上发现了一个参考资料,其中指出 INTERNET_OPEN_TYPE_PRECONFIG 已“损坏”。 5 年过去了,IE8 beta 2 还没有修复吗? 或者我做错了。

编辑
我不太正确。 如果您处于“脱机工作”模式并使用 FTP,InternetConnect() 始终返回 null,但如果您使用 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);

I'm trying to get Wininet to ignore Internet Explorer's "Work Offline" mode, for both HTTP and FTP.

So I'm trying to use InternetSetOption() with INTERNET_OPTION_IGNORE_OFFLINE. The documentation says "This is used by InternetQueryOption and InternetSetOption with a request handle." However, you can't get a request handle because if IE is in Work Offline mode then InternetConnect() will always return a null handle. Without a connection handle you can't get a request handle. So I tried using it with an InternetOpen() handle and a NULL handle. Both failed with ERROR_INTERNET_INCORRECT_HANDLE_TYPE.

Is there a way to get this option to work? I found a reference on an MS newsgroup from 2003 that INTERNET_OPEN_TYPE_PRECONFIG is "broken". 5 years later with IE8 beta 2 and they still haven't fixed it? Or am I doing it wrong.

Edit
I wasn't quite correct. InternetConnect() always returns null if you are on "Work Offline" mode and using FTP, but it returns a valid handle if you are using Http. However, it still doesn't work even with a request handle.

If I am set to "Work Offline" and I call

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

on the handle from

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

the InternetSetOption() call succeeds.
However, the call to HttpSendRequest() still fails with error code 2 (file not found), same as it does if I don't set the option.
Same thing if I call

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安稳善良 2024-07-14 15:03:20

我检查了 INTERNET_OPTION_IGNORE_OFFLINE 与 IE 9 版本 WinInet 的使用情况,它似乎确实有效。

确保在调用 HttpOpenRequest 之前调用 InternetSetOption 并传入 hInternet 句柄。 必须在请求实际发送到服务器之前设置该选项。 HttpOpenRequest

+++ 瑞克 ---

I checked use of INTERNET_OPTION_IGNORE_OFFLINE with the IE 9 version of WinInet and it does seem to work.

Make sure you call InternetSetOption before you call HttpOpenRequest and pass in the hInternet handle instead. The option must be set before the request actually gets sent to the server. HttpOpenRequest

+++ Rick ---

哆兒滾 2024-07-14 15:03:20

您是否尝试使用 GET 而不是在标头中发送附加数据的 POST

例如,在 REST-ful API 中,POST 请求相当于创建、更新、删除和 GET 读取,这可能会破坏离线模式。 只是猜测...

Did you tried GET instead of POST which sends additional data in headers?

For example in REST-ful API POST request is equivalent to Create, Update, Delete and GET to Read and that might break the offline mode. Just guessing...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文