.net后台模拟浏览器get/post请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net后台模拟浏览器get/post请求相关的知识,希望对你有一定的参考价值。
#region 后台模拟浏览器get/post请求 /// <summary> /// 发送请求方式 /// </summary> /// <param name="url">请求Url</param> /// <param name="para">请求参数</param> /// <param name="method">请求方式GET/POST</param> /// <returns></returns> public static string SendRequest(string url, string para, string method) { string strResult = ""; if (url == null || url == "") return null; if (method == null || method == "") method = "GET";
// GET方式 if (method.ToUpper() == "GET") { try { System.Net.WebRequest wrq = System.Net.WebRequest.Create(url + para); wrq.Method = "GET"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; System.Net.WebResponse wrp = wrq.GetResponse(); System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8")); strResult = sr.ReadToEnd(); } catch (Exception ex) { return ex.Message; } }
// POST方式 if (method.ToUpper() == "POST") { if (para.Length > 0 && para.IndexOf(‘?‘) == 0) { para = para.Substring(1); } WebRequest req = WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; StringBuilder UrlEncoded = new StringBuilder(); Char[] reserved = { ‘?‘, ‘=‘, ‘&‘ }; byte[] SomeBytes = null; if (para != null) { int i = 0, j; while (i < para.Length) { j = para.IndexOfAny(reserved, i); if (j == -1) { UrlEncoded.Append(HttpUtility.UrlEncode(para.Substring(i, para.Length - i), System.Text.Encoding.GetEncoding("utf-8"))); break; } UrlEncoded.Append(HttpUtility.UrlEncode(para.Substring(i, j - i), System.Text.Encoding.GetEncoding("utf-8"))); UrlEncoded.Append(para.Substring(j, 1)); i = j + 1; } SomeBytes = Encoding.Default.GetBytes(UrlEncoded.ToString()); req.ContentLength = SomeBytes.Length; Stream newStream = req.GetRequestStream(); newStream.Write(SomeBytes, 0, SomeBytes.Length); newStream.Close(); } else { req.ContentLength = 0; } try { WebResponse result = req.GetResponse(); Stream ReceiveStream = result.GetResponseStream(); Byte[] read = new Byte[512]; int bytes = ReceiveStream.Read(read, 0, 512); while (bytes > 0) {// 如果内容以 ANSI 代码页形式 // Encoding encode = System.Text.Encoding.GetEncoding("shift-jis"); Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); strResult += encode.GetString(read, 0, bytes); bytes = ReceiveStream.Read(read, 0, 512); } return strResult; } catch (Exception ex) { return ex.Message; } } return strResult; } #endregion
public static string SendRequest(string url, string para) { return SendRequest(url, para, "GET"); }
以上是关于.net后台模拟浏览器get/post请求的主要内容,如果未能解决你的问题,请参考以下文章