3

WinINet ライブラリは、それを介してアクセスされるすべての URL の IP アドレスをキャッシュします。このため、その URL の IP アドレスが変更されると、WinInet ライブラリもHttpSendRequest古い IP アドレスになります。

また、古い IP が応答している場合、WinINet はすべての http 要求を古い IP のみに送信します。

WinInet の DNS キャッシュをクリーンにする方法はありますか?

または

WinINet に指定した IP アドレスに HTTP リクエストを強制的に送信させる方法はありますか (を使用して新しい 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 に答える