webclient类学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webclient类学习相关的知识,希望对你有一定的参考价值。

(HttpWebRequest模拟请求登录):当一些硬件设备接口 或需要调用其他地方的接口时,模拟请求登录获取接口的数据就很有必要。

webclient类:只想从特定的URI请求文件,则使用WebClient;

1.创建带Cookie的webclient:

    /// <summary>  
    /// 带 Cookie 的 WebClient  
    /// </summary>  
    public class CookieWebClient : WebClient  
    {  
        // Cookie 容器  
        public CookieContainer Cookies;  
      
        /// <summary>  
        /// 创建一个新的 CookieWebClient 实例。  
        /// </summary>  
        public CookieWebClient()  
        {  
            this.Cookies = new CookieContainer();  
        }  
      
        protected override WebRequest GetWebRequest(Uri address)  
        {  
            WebRequest request = base.GetWebRequest(address);  
            if (request is HttpWebRequest)  
            {  
                HttpWebRequest httpRequest = request as HttpWebRequest;  
                httpRequest.CookieContainer = Cookies;  
            }  
            return request;  
        }  
    }  

2.http方法(Get、POST):

public  CookieContainer cookies;
        internal string HttpGet(string Url)
        {
            string result = "";
            using (var client = new CookieWebClient())
            {
                client.Encoding = Encoding.UTF8;
                client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded,charset=UTF-8";
                client.Cookie = cookies;
                byte[] data = client.DownloadData(Url);
                result = Encoding.UTF8.GetString(data);
            } 
            return result;
        }
        internal string HttpPost(string Url, string postDataStr)
        {
            string result = "";
            using (var client = new CookieWebClient())
            {
                client.Encoding = Encoding.UTF8;
                client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded; charset=UTF-8";
                byte[] post = Encoding.UTF8.GetBytes(postDataStr);
                byte[] data = client.UploadData(Url,post);
                result = Encoding.UTF8.GetString(data);
                cookies = client.Cookie;
            }
            return result;
        }

3. controller

 [HttpGet]
        public string Getinfo(string name, string pwd)
        {
            string hg = "";
            string url = "http://111.38.56.130:8084/LoginHandler.ashx?time=" + DateTime.Now;
            string loginp = "action=Login&flag=1&name={0}&pwd={1}&isRemember=false";
            string urlget = "http://111.38.56.130:8084/Company/IndexHandler.ashx?time={0}&action=deviceShowData&greenHouseSerialNum=00000F003G001";
            string param = string.Format(loginp, name, pwd);
            exta.http h = new exta.http();
            string r = h.HttpPost(url, param);
            if (r.Equals("0"))
            {
                hg = h.HttpGet(string.Format(urlget, DateTime.Now));
            }
            return hg;
        }

 

以上是关于webclient类学习的主要内容,如果未能解决你的问题,请参考以下文章

c#利用WebClient和WebRequest获取网页源代码的比较

JavaWeb学习—Servlet

将 CookieContainer 与 WebClient 类一起使用

如何防止 WebClient 类自动跟随标头中的位置?

C# 发送Http请求 - WebClient类

使用 C# Windows Forms 和 webclient 下载文件