我有这段代码:
class CustomWebclient: WebClient
{
[System.Security.SecuritySafeCritical]
public CustomWebclient(): base()
{
}
public CookieContainer cookieContainer = new CookieContainer();
protected override WebRequest GetWebRequest(Uri myAddress)
{
WebRequest request = base.GetWebRequest(myAddress);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = cookieContainer;
(request as HttpWebRequest).AllowAutoRedirect = true;
}
return request;
}
}
当我加载页面example.com时,我得到:
Server: nginx
Date: Fri, 23 Aug 2013 05:24:44 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: /examplePage
但我的CustomWebclient不遵循重定向。 为什么?该怎么做才能解决它?
可能它没有用,因为" location"小写。
答案 0 :(得分:1)
我的测试下你的代码运行正常。
我的测试网站weibo.com将在提供适当的cookie时强制通过HTTP 302进行重定向。
关闭autoredirect,响应标头
Transfer-Encoding: chunked
Connection: close
Pramga: no-cache
DPOOL_HEADER: dagda24
Cache-Control: no-cache, must-revalidate
Content-Type: text/html
Date: Thu, 13 Mar 2014 15:07:53 GMT
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Thu, 13 Mar 2014 15:07:53 GMT
Location: /u/2398332747/home?wvr=5
Server: nginx
并且网页显然没有重定向。
启用autoredirect后,响应标头为,
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
Pragma: no-cache
DPOOL_HEADER: balor165
Cache-Control: no-cache, must-revalidate
Content-Type: text/html; charset=utf-8
Date: Thu, 13 Mar 2014 15:13:26 GMT
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Server: nginx
网页内容验证请求是否已重定向。
我注意到Location标头的第一个字母是大写字母。没有测试标题格式是否相关。
编辑:
最后,对example.com进行了测试,但在我的环境下,它根本不会触发重定向。这就是我选择weibo.com作为替代选择的原因。
编辑:
我对此做了一些更多的研究,根据RFC 2616,标题不区分大小写。你的代码对我来说没问题,但仍然不知道为什么会出错。希望其他人带头。