我正在开发一个网络自动化工具。在运行该工具后,一旦相关网站创建了 cookie,如果我再次尝试运行它会破坏自动化。因此,我想在自动化开始之前删除 cookie。我无权访问实际创建 cookie 的域。这可能吗?我知道如何操作 cookie,但是当您尝试从其他网站访问 cookie 时,所有这些逻辑都会失败。
此外,如果可以避免的话,我不想创建 WebBrowser 控件。我正在尝试使用 httpWebRequests 做所有事情,以使其看起来更好。
我正在开发一个网络自动化工具。在运行该工具后,一旦相关网站创建了 cookie,如果我再次尝试运行它会破坏自动化。因此,我想在自动化开始之前删除 cookie。我无权访问实际创建 cookie 的域。这可能吗?我知道如何操作 cookie,但是当您尝试从其他网站访问 cookie 时,所有这些逻辑都会失败。
此外,如果可以避免的话,我不想创建 WebBrowser 控件。我正在尝试使用 httpWebRequests 做所有事情,以使其看起来更好。
如果您的测试环境在 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);
您应该无法使用来自 X 以外的其他地方的 http 请求删除网站 X 放置的 cookie。
你有两种可能性:
我最终只是清除了所有的 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) { }
}
}