我之前使用过带有HttpWebRequest和HttpWebResponse会话的CookieContainer,但现在,我想将它与WebClient一起使用.据我所知,没有像HttpWebRequests(request.CookieContainer)那样的内置方法.如何从CookieContainer中的WebClient收集cookie?
public class CookieAwareWebClient : WebClient
{
private readonly CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.CookieContainer = m_container;
}
return request;
}
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
这适用于在脚本中设置的cookie(可能在脚本标记内).
System.Windows.Forms.HtmlDocument执行这些脚本,document.cookie=etc...可以通过其Cookies属性检索cookie集(如).
我假设HtmlAgilityPack.HtmlDocument不这样做(执行).我想知道是否有一种简单的方法来模拟System.Windows.Forms.HtmlDocument功能(cookies部分).
任何人?
我想在我的程序中获取有关Microsoft Update的信息.但是,服务器在大约80%的时间返回404错误.我将有问题的代码归结为此控制台应用程序:
using System;
using System.Net;
namespace WebBug
{
class Program
{
static void Main(string[] args)
{
while (true)
{
try
{
WebClient client = new WebClient();
Console.WriteLine(client.DownloadString("https://support.microsoft.com/api/content/kb/3068708"));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我必须经历几次循环,直到得到实际响应:
远程服务器返回错误:(404)未找到.
远程服务器返回错误:(404)未找到.
远程服务器返回错误:(404)未找到.
<div kb-title title ="客户体验和诊断遥测更新[...]
我可以随时打开并强制刷新(Ctrl + F5)我浏览器中的链接,但它会显示正常.
问题发生在具有两个不同互联网连接的两台不同机器上.
我也使用Html Agility Pack测试了这个案例,但结果相同.其他网站不会出现
此问题.(根部工作正常100%)https://support.microsoft.com
为什么我会得到这个奇怪的结果?