0

我正在开发一个网络自动化工具。在运行该工具后,一旦相关网站创建了 cookie,如果我再次尝试运行它会破坏自动化。因此,我想在自动化开始之前删除 cookie。我无权访问实际创建 cookie 的域。这可能吗?我知道如何操作 cookie,但是当您尝试从其他网站访问 cookie 时,所有这些逻辑都会失败。

此外,如果可以避免的话,我不想创建 WebBrowser 控件。我正在尝试使用 httpWebRequests 做所有事情,以使其看起来更好。

4

3 回答 3

2

如果您的测试环境在 Windows 系统上运行(听起来确实如此),您可以使用 pInvoke 来操作缓存。需要以下四种方法。不幸的是,代码归我工作的公司所有,而不是我,所以我不能在这里全部粘贴。它涉及使用“FindFirstUrlCacheEntry”和“FindNextUrlCacheEntry”迭代缓存中的条目。检查缓存条目,看它是否是 cookie,是否属于您感兴趣的域,如果是,您可以将其删除。

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindFirstUrlCacheEntry ([MarshalAs (UnmanagedType.LPTStr)] string searchPattern, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize);

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool FindNextUrlCacheEntry (IntPtr ptrCacheHandler, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize);

[DllImport (@"wininet", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern bool FindCloseUrlCache (IntPtr ptrCacheEntryInfo);

[DllImport ("wininet.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool DeleteUrlCacheEntry (IntPtr lpszUrlName);
于 2012-05-10T17:20:02.603 回答
0

您应该无法使用来自 X 以外的其他地方的 http 请求删除网站 X 放置的 cookie。

你有两种可能性:

  • 您使用自动化工具自动从浏览器 UI 中删除 cookie。
  • 您通过更改与本地缓存中的 x 域相关的 ip(或通过其他方式)来伪造网站 X。
于 2012-05-10T16:57:41.647 回答
0

我最终只是清除了所有的 cookie。服务器的设置方式应该不多,所以这真的不是问题。遍历每个 cookie 是它对我有用的唯一方法。当我尝试删除文件夹时,我收到有关我的权限级别的错误。

    private void ClearCookies()
    {
        string[] theCookies = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Cookies));

        foreach (string currentFile in theCookies)
        {
            try
            {
                System.IO.File.Delete(currentFile);
            }
            catch (Exception ex) { }
        }
    }
于 2012-05-11T14:58:35.470 回答