如何为Web客户端打开autoredirect

本文关键字:autoredirect 客户端 Web | 更新日期: 2023-09-27 18:28:39

我有这个代码:

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

但是我的CustomWeb客户端不遵循重定向。为什么?该怎么办才能修复它?

可能是因为小写的"location"不起作用。

如何为Web客户端打开autoredirect

您的代码在我的测试下运行良好。

当提供了合适的cookie时,我的测试网站weibo.com将通过HTTP302强制重定向。

在自动重定向关闭的情况下,响应标头为

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进行了测试,但在我的环境下,它根本不会触发重定向。这就是为什么我选择了微博作为替代。

编辑:

我对此做了更多的研究,根据RFC 2616,头是不区分大小写的。你的代码对我来说很好,但仍然不知道为什么会出错。希望其他人能起带头作用。