none
System.Net.Http.HttpClient 如何实现模拟登录 RRS feed

  • 问题

  • 我使用 HttpWebRequest 的方式已经实现了对 A 网站的模拟登录,现在想用 System.Net.Http.HttpClient 中的相关异步方法重写。但在HttpClient 对象的使用中没有找到如 HttpWebRequest 中对 Cookie 的保存和使用操作,不知如何通过 HttpClient 来控制。

    请问

    1. 使用 .Net 4.5 中的 System.Net.Http.HttpClient 如何实现模拟登录

    2. 如何保存“登录状态”以便下次操作(程序运行期间)从同一站点获取登录后内容?

    2. 如何控制获取到页面的编码?

    如果可以,请麻烦指点一二,谢谢!!


    不重要的其实最重要


    2014年1月15日 17:45

答案

  • 在专案底下 使用NuGet 下载 Microsoft HTTP CLient Libraries 

    并透过这篇文章的教学就可以修改为await的异步方式了

    http://www.dotblogs.com.tw/holiestar/archive/2013/12/11/133591.aspx
    2014年1月18日 15:09
  • HttpClient的构造函数需要一个参数:

    public HttpClient( HttpMessageHandler handler )

    这个参数默认是WebRequestHandler来处理(具体参考:http://msdn.microsoft.com/zh-cn/library/system.net.http.webrequesthandler%28v=vs.110%29.aspx),因为WebRequestHandler实现了HttpClientHandler类,而HttpClientHandler又实现了HttpMessageHandler类(注意:HttpMessageHandler是抽象类)。其中WebRequestHandler包含从HttpClientHandler直接继承的CookieContainer属性,可以利用它进行Cookie操作,注意不要忘记设置UseCookies

    至于说编码问题,必须在请求结束之后返回页面时获取。您可以尝试使用:

    public Task<HttpResponseMessage> SendAsync(
    	HttpRequestMessage request
    )

    这个函数异步发送请求,返回值是一个HttpResponseMessage类。这个类包含一个Content对象(属于HttpContent类),其中就有Headers属性(属于HttpContentHeaders类),其中又包含ContentEncoding属性,估计可以从这里获取编码对象等信息。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月17日 2:20
    版主

全部回复

  • HttpClient的构造函数需要一个参数:

    public HttpClient( HttpMessageHandler handler )

    这个参数默认是WebRequestHandler来处理(具体参考:http://msdn.microsoft.com/zh-cn/library/system.net.http.webrequesthandler%28v=vs.110%29.aspx),因为WebRequestHandler实现了HttpClientHandler类,而HttpClientHandler又实现了HttpMessageHandler类(注意:HttpMessageHandler是抽象类)。其中WebRequestHandler包含从HttpClientHandler直接继承的CookieContainer属性,可以利用它进行Cookie操作,注意不要忘记设置UseCookies

    至于说编码问题,必须在请求结束之后返回页面时获取。您可以尝试使用:

    public Task<HttpResponseMessage> SendAsync(
    	HttpRequestMessage request
    )

    这个函数异步发送请求,返回值是一个HttpResponseMessage类。这个类包含一个Content对象(属于HttpContent类),其中就有Headers属性(属于HttpContentHeaders类),其中又包含ContentEncoding属性,估计可以从这里获取编码对象等信息。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月17日 2:20
    版主
  • 在专案底下 使用NuGet 下载 Microsoft HTTP CLient Libraries 

    并透过这篇文章的教学就可以修改为await的异步方式了

    http://www.dotblogs.com.tw/holiestar/archive/2013/12/11/133591.aspx
    2014年1月18日 15:09
  • 有事没来得及上来标记答案,多谢 SUKI 的回答,我去学习一下

    不重要的其实最重要

    2014年2月19日 4:38
  • 感谢 ThankfulHeart 的帮助,我去学习一下

    不重要的其实最重要

    2014年2月19日 4:40