C# Get和Post獲取和請求頁面資訊(HttpWebRequest 、WebClient、HttpClient)
阿新 • • 發佈:2019-02-17
主要用兩個方式進行Post HttpWebRespose 和WebClient post url及相關引數獲取內容資訊
WebClient 使用:
/// <summary> /// 多次呼叫Post請求返回 HTML資訊 通過關一點通用 /// </summary> /// <param name="url"></param> /// <param name="postString"></param> /// <returns></returns> public static string HttpAspxPostHtmlInfo(string url, string postString) { byte[] postData = Encoding.UTF8.GetBytes(postString);//編碼,事先要看下抓取網頁的編碼方式 WebClient webClient = new WebClient(); webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//採取POST方式必須加的header,如果改為GET方式的話就去掉這句話即可 byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字元流 var retString = Encoding.UTF8.GetString(responseData);//解碼返回請求的html 內容 return retString; }
HttpWebReqest 使用:
/// <summary> /// ASP 頁面POST請求與獲取結果 /// </summary> /// <param name="Url">posturl</param> /// <param name="postDataStr">post引數</param> /// <param name="encoding">頁面編碼</param> /// <returns></returns> public static string HttpAspPostMathHtml(string Url, string postDataStr, string encoding) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.Accept = "text/html, application/xhtml+xml, image/jxr, */*"; request.ContentType = "application/x-www-form-urlencoded"; request.KeepAlive = true; request.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.7,ja;q=0.3"); request.Headers.Add("Accept-Encoding", "gzip, deflate"); request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"; byte[] bytes = System.Text.Encoding.Default.GetBytes(postDataStr); request.ContentLength = bytes.Length; Stream stream = request.GetRequestStream(); stream.Write(bytes, 0, bytes.Length); stream.Close();//以上是POST資料的寫入 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); var retString = string.Empty; using (Stream responsestream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.GetEncoding(encoding))) { retString = sr.ReadToEnd(); } } var resultStr = Regex.Matches(DelHTML(retString), @"(?is)<body[^>]*?>([\s\S].*?)</body>") .Cast<Match>().Select(mx => mx.Groups[0].Value.TrimStart().TrimEnd()).ToList(); return resultStr[0].ToString(); } /// <summary> /// ASP 頁面Get請求與獲取結果 /// </summary> /// <param name="Url">posturl</param> /// <param name="postDataStr">post引數</param> /// <param name="encoding">頁面編碼</param> /// <returns></returns> public static string HttpAspGetMathHtml(string Url, string postDataStr, string encoding) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + "?" + postDataStr); request.Method = "Get"; request.Accept = "text/html, application/xhtml+xml, image/jxr, */*"; request.KeepAlive = true; request.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.7,ja;q=0.3"); request.Headers.Add("Accept-Encoding", "gzip, deflate"); request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); var retString = string.Empty; using (Stream responsestream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.GetEncoding(encoding))) { retString = sr.ReadToEnd(); } } return retString; }
HttpClient 使用
/// <summary> /// ASPX頁面POST請求與獲取結果 /// </summary> /// <param name="Url"></param> /// <param name="postDataStr"></param> /// <returns></returns> public static string HttpAspxPostMathHtml(string Url, List<KeyValuePair<String, String>> postDataStr) { var retString = string.Empty; HttpClient httpClient = new HttpClient(); HttpResponseMessage response = httpClient.GetAsync(new Uri(Url)).Result; response = httpClient.PostAsync(new Uri(Url), new FormUrlEncodedContent(postDataStr)).Result; retString = response.Content.ReadAsStringAsync().Result; var resultStr = Regex.Matches(DelHTML(retString), @"(?is)<body[^>]*?>([\s\S].*?)</body>") .Cast<Match>().Select(mx => mx.Groups[0].Value.TrimStart().TrimEnd()).ToList(); //用完要記得釋放 httpClient.Dispose(); return resultStr[0].ToString(); }
HttpAspPostMathHtml 使用方法:
var sPuci = HttpAspPostMathHtml("http://www.xx.com/search/index_dt_container.asp", "search=true&companyname=
&companycode=&container_no=&bill_no=" + strBlNo + "&btn3.x=39&btn3.y=15", "gb2312");
HttpAspxPostHtmlInfo使用方法:
HttpAspxPostHtmlInfo("http://www.xx.com/search/index_dt_container.asp", "search=true&companyname=
&companycode=&container_no=&bill_no=" + strBlNo + "&btn3.x=39&btn3.y=15");
HttpAspGetMathHtml使用方法: HttpAspGetMathHtml("http://2.22.96.22/query/search_bl_no.asp", "BL_NO1=" + strBlNo + "&submit1=%B2%E9%D1%AF", "gb2312");