3

WinINet 库缓存通过它访问的任何 URL 的 IP 地址。因此,当该 URL 的 IP 地址发生更改时,WinInet 库也会HttpSendRequest使用旧 IP 地址。

而且,如果旧 IP 正在响应,则 WinINet 将仅将所有 http 请求发送到旧 IP。

有什么方法可以强制清除 WinInet 的 DNS 缓存?

或者

有什么方法可以强制 WinINet 将 HTTP 请求发送到指定的 IP 地址(因为我们可以使用 获取更新的 IP gethostbyname())?

笔记 :

  1. gethostbyname给了我更新的 IP 地址,所以这种行为发生在 WinINet 的缓存中。
  2. 我已经尝试过这篇 MS 文章中建议的“方法 2” ,但没有帮助
  3. 示例代码
4

1 回答 1

2

您可以尝试在连接时使用该标志

INTERNET_FLAG_DONT_CACHE = 0x04000000 不将返回的实体添加到缓存中。这与首选值 INTERNET_FLAG_NO_CACHE_WRITE 相同。

或者您可以在此处查看WinInet 文档中的 DeleteUrlCacheEntry

我相信这应该可以解决问题。

- 更新

这个文档中我看到有一个更好的标志可以使用它,看看:

INTERNET_FLAG_PRAGMA_NOCACHE 强制请求由源服务器解析,即使代理上存在缓存副本。

- 更新

正如@Pradeep 测试的那样,您可以更改此注册表项以使其工作:HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\DnsCacheEnabled ServerInfoTimeOut 和 DnsCacheTimeout 为 0。

于 2012-05-22T10:19:07.070 回答