HttpWebRequest
这是.NET创建者最初开发用于使用HTTP请求的标准类。HttpWebRequest是老版本.net下常用的,较为底层且复杂,访问速度及并发也不甚理想,但是使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。通常和WebResponse一起使用,一个发送请求,一个获取数据。另外HttpWebRequest库已经过时,不适合业务中直接使用,他更适用于框架内部操作。
/// <summary> /// HttpWebRequest请求网页示例 /// </summary> /// <param name="args"></param> static void Main(string[] args) { HttpWebRequest httpWebRequest = null; HttpWebResponse httpWebResponse = null; Stream responseStream = null; string url = "https://www.cnblogs.com/"; try { httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); //cookie,cookie一般用来验证登录或是跟踪使用 httpWebRequest.CookieContainer = new CookieContainer(); httpWebRequest.CookieContainer.Add(new Cookie() { Name = "test", Value = "test1",Domain="www.cnblogs.com" }); //来源页面 httpWebRequest.Referer = url; //比较重要的UserAgent httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0 Gecko/20100101 Firefox/52.0"; //请求方法,有GET,POPST,PUT等 httpWebRequest.Method = "GET"; //如果上传文件,是要设置 GetRequestStream //httpWebRequest.GetRequestStream try { httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); } catch (System.Net.WebException we) { ///这个说明服务器返回了信息了,不过是非200,301,302这样正常的状态码 if (we.Response != null) { httpWebResponse = (HttpWebResponse)we.Response; } } ///得到返回的stream,如果请求的是一个文件或图片,可以直接使用或保存 responseStream = httpWebResponse.GetResponseStream(); ///使用utf8方式读取数据流 StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); ///这里是一次性读取,对于超大的stream,要不断读取并保存 string html = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); Console.WriteLine(html.Length); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (httpWebRequest != null) httpWebRequest.Abort(); if (httpWebResponse != null) httpWebResponse.Close(); if (responseStream != null) responseStream.Close(); } }