返回首页


WebClient类可用于自动登录到Web应用程序。如果Web应用程序需要客户端启用Cookie,这往往是当应用程序使用会话状态的情况下,应用程序返回一个错误指示,必须启用cookie到客户端。 WebClient类可以扩展支持,所覆盖的GetWebRequest方法和实施一个CookieContainer的cookie。这允许客户端登录到应用程序和cookie的状态保持到Web应用程序的后续调用。
为了证明这一点,我们应该加载的Visual Studio(2008/2010),并创建一个新的控制台应用程序。添加一个新类,名称,WebClientWithCookies。类应该如下:

class WebClientWithCookies: WebClient

{

    private CookieContainer _container = new CookieContainer();



    protected override WebRequest GetWebRequest(Uri address) 

    {

        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest; 

        

        if (request != null) 

        { 

            request.Method = "Post";

            request.CookieContainer = _container; 

        } 



        return request;

    }

}

类中的覆盖提供了HttpWebRequest的职权范围,便于访问的CookieContainer属性的访问。创建一个新的CookieContainer对象和相关的Request对象。这允许客户端存储的Cookie在Web应用程序请求的CookieContainer属性。我们还设置请求使用POST方法(这是没有必要,如果Web应用程序允许GET请求)。
现在,打开控制台应用程序类和更新的代码如下所示:{C}
Post方法实例化一个Web客户端(支持Cookies)对象发送请求到Web应用程序。你也应该注意到,我们添加了一个请求头包含任何的Cookie已经坚持。异步的Web应用程序的调用,并client_OpenReadCompleted处理程序处理请求的结果。如果没有错误,处理程序读取数据流,并显示在控制台上的反应。客户端引用,然后用来读取响应头。这里我们使用Set - Cookie头的名称是由ASP.NET应用程序中使用。您可能需要使用像Fiddler工具来检查响应头。经检查,可以帮助您确定您使用的是从系统的cookie头键的名称。在响应的cookie被保存在一个变量中。这是必要的,因为任何其他的随后到Web应用程序的调用,我们需要cookie发送回服务器。如果cookie不发送回服务器,Web应用程序会重定向到登录页面。
我希望这会有所帮助。

回答

评论会员:yangzn 时间:2012/01/27
错误消息:远程服务器返回错误:(411)需要长度
。但得到的方法是确定的。
当我使用POST方法,我该怎样传递参数
评论会员:?ozkar加西亚 时间:2012/01/27
一个职位,参数都可以通过相同的方式来传递一个查​​询字符串。当你得到所需的长度,这意味着你需要添加一个Content - Length头。您可能需要添加以下内容:
WC是WebClient实例:

/ /头
wc.Headers.Add(Net.HttpRequestHeader.ContentType,"应用程序/ X - WWW形式,进行了urlencoded")
wc.Headers.Add(Net.HttpRequestHeader.ContentLength,LENGTH_OF_THE_QUERY_STRING)

/ /头,您可能需要
wc.Headers.Add(Net.HttpRequestHeader.Accept,"*/*"){ BR}wc.Headers.Add(Net.HttpRequestHeader.KeepAlive,"1")

希望帮助