概述
HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。HTTP 请求方法种类包含 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 等。
那么,如何使用C#模拟(传统方法)发送Post请求或Get请求呢?
解释
public static class PostHelper { private static readonly string DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/63.0.3239.132 Safari/537.36"; private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; } /// <summary> /// Url_encoding /// </summary> /// <param name="str"></param> /// <returns></returns> public static string UrlEncode(string str) { var sb = new StringBuilder(); var byStr = Encoding.UTF8.GetBytes(str); for (var i = 0; i < byStr.Length; i++) { sb.Append(@"%" + Convert.ToString(byStr[i], 16)); } return (sb.ToString().ToUpper()); } /// <summary> /// 提供一个将数据POST到指定URL的方法 /// </summary> /// <param name="url">要POST数据的地址</param> /// <param name="postDataStr">参数列表,param1=666%param2=888</param> /// <returns>POST成功或失败</returns> public static string Post(string url, string postDataStr = "") { ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var encoding = Encoding.UTF8; var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postDataStr.Length; byte[] payload; payload = encoding.GetBytes(postDataStr); request.ContentLength = payload.Length; var writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); var response = (HttpWebResponse)request.GetResponse(); var reader = new StreamReader(response.GetResponseStream(), encoding); var retString = reader.ReadToEnd(); return retString; } /// <summary> /// 发送Get请求 /// </summary> /// <param name="url">地址</param> /// <param name="dic">请求参数定义</param> /// <returns></returns> public static string Get(string url, Dictionary<string, string> dic) { var result = string.Empty; var builder = new StringBuilder(); builder.Append(url); if (dic.Count > 0) { builder.Append("?"); var i = 0; foreach (var item in dic) { if (i > 0) builder.Append("&"); builder.AppendFormat("{0}={1}", item.Key, item.Value); i++; } } var req = (HttpWebRequest)WebRequest.Create(builder.ToString()); req.Method = "GET"; req.Host = "www.baidu.com"; req.UserAgent = DefaultUserAgent; req.Accept = "*/*"; req.KeepAlive = true; req.UserAgent = "PostmanRuntime/7.24.1"; req.AllowAutoRedirect = true; //添加参数 var resp = (HttpWebResponse)req.GetResponse(); var stream = resp.GetResponseStream(); try { //获取内容 using (var reader = new StreamReader(stream)) { result = reader.ReadToEnd(); } } finally { stream.Close(); } return result; } }