.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请求的主要内容,如果未能解决你的问题,请参考以下文章

Linux curl 命令模拟 POST/GET 请求

curl 模拟 http发送get/post请求

php模拟发送GET和POST请求

搭建简单Django服务并通过HttpRequester实现GET/POST请求提交表单

AJAX(二)详解GET/POST请求

前后台交互方式