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