Wininet 的 INTERNET_OPTION_IGNORE_OFFLINE 不起作用?

Posted

技术标签:

【中文标题】Wininet 的 INTERNET_OPTION_IGNORE_OFFLINE 不起作用?【英文标题】:Wininet's INTERNET_OPTION_IGNORE_OFFLINE doesn't work? 【发布时间】:2008-10-23 19:33:44 【问题描述】:

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

所以我尝试将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);

【问题讨论】:

【参考方案1】:

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

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

+++ 瑞克 ---

【讨论】:

【参考方案2】:

您是否尝试过 GET 而不是 POST 在标头中发送额外数据?

例如,在 REST-ful API 中,POST 请求等同于 Create、Update、Delete 和 GET to Read,这可能会破坏离线模式。只是猜测...

【讨论】:

以上是关于Wininet 的 INTERNET_OPTION_IGNORE_OFFLINE 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Wininet 缓存包装器

WinInet - 没有 Internet Explorer 就无法工作?

Delphi 中用于 FTP 的 WinInet 包装器

Wininet上传文件TCHAR问题

使用 wininet 设置代理设置

WinInet 未定义标识符