以编程方式清除WinInet DNS缓存

时间:2012-05-17 05:09:50

标签: caching dns httprequest wininet

WinINet库缓存通过它访问的任何URL的IP地址。因此,当该URL的IP地址发生变化时,WinInet库的HttpSendRequest也会转到较旧的IP地址。

并且,如果较旧的IP响应,则WinINet将仅向旧IP发送所有http请求。

有没有办法强制清除WinInet的DNS缓存?

或者

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

注意:

  1. gethostbyname给了我更新的IP地址,所以这种行为正在发生在WinINet的缓存中。
  2. 我在this MS article中尝试了“方法2”,但没有帮助
  3. Sample code

1 个答案:

答案 0 :(得分:2)

连接时可以尝试使用flag

  

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

或者您可以查看WinInet文档here中的DeleteUrlCacheEntry

我认为应该这样做。

<强> - UPDATE

this doc我看到有一个更好的旗帜可以使用它,看看:

  

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

<强> - UPDATE

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