我使用此代码登录并下载所需文件大约半年,现在它已经开始抛出异常参数“{0}”不能是空字符串。参数名称:cookie.Domain ,我查了谷歌,这是一个很受欢迎的问题,但我不明白为什么?以前一切都还好,而且我没有改变任何程序代码,但是有什么可以改变铁路运输饼干,所以我的程序现在无法理解它们?
CookieContainer cookies = new CookieContainer();
CookieAwareWebClient http = new CookieAwareWebClient(cookies);
string sLogin = "name=_______&password=_______&dobav2_login=_______";
http.Headers["Content-type"] = "application/x-www-form-urlencoded";
http.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
string sResponse = http.UploadString("https://www.railwagonlocation.com/en/index.php", sLogin);
richTextBox1.Text = sResponse;
http.DownloadFile("https://www.railwagonlocation.com/export_excel.php?export_type=vagon_list&l=en", "D:\\my_excel.xlsx");
AwareClient
public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public Uri Uri { get; set; }
public CookieAwareWebClient()
: this(new CookieContainer())
{
}
public CookieAwareWebClient(CookieContainer cookies)
{
this.CookieContainer = cookies;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = this.CookieContainer;
}
HttpWebRequest httpRequest = (HttpWebRequest)request;
httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
return httpRequest;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];
if (setCookieHeader != null)
{
//do something if needed to parse out the cookie.
if (setCookieHeader != null)
{
Cookie cookie = new Cookie(); //create cookie
this.CookieContainer.Add(cookie);
}
}
return response;
}
}
在线出错
this.CookieContainer.Add(cookie);
此外,我们如何在此处 cookie.Domain 参数
Cookie cookie = new Cookie(); //create cookie
this.CookieContainer.Add(cookie);
如果我们刚刚创建了新的cookie?
答案 0 :(得分:1)
好吧,你要做的就是创建一个空cookie,你没有设置域名,名称或值,这就是CookieContainer在你尝试添加它时所检查的内容。因此,一种解决方案是设置该cookie的值。 但是,由于您在GetRequest覆盖中已经引用了CookieContainer,因此您不必对响应中使用的Set-Cookie标头执行任何操作,CookieContainer应该已经添加了这些Cookie。