C# http、https的get与post请求方法
public class HttpTools { public static string GetRequest(string url) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "get"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { string result = sr.ReadToEnd(); return result; } } /// <summary> /// HttpPostByJson /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> public static string HttpPostByJson(string url, string param, WebHeaderCollection headers) { string strURL = url; System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(strURL); //添加信息头(header) request.Headers = headers; request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; string paraUrlCoded = param; byte[] payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.Stream s = response.GetResponseStream(); string StrDate = string.Empty; StringBuilder sb = new StringBuilder(); StreamReader Reader = new StreamReader(s, Encoding.UTF8); while ((StrDate = Reader.ReadLine()) != null) { sb.Append(StrDate); } return sb.ToString(); } /// <summary> /// PostRequest /// </summary> /// <param name="url"></param> /// <param name="paramList"></param> /// <returns></returns> public static string PostRequest(string url, Dictionary<object, object> paramList) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); StringBuilder sb = new StringBuilder(); foreach (var item in paramList) { sb.Append(item.Key + "=" + item.Value + "&"); } //将参数拼为:"name=test&pwd=123" 这种字符串格式 然后将字符串转为byte数组 最后将byte数组写入请求流中 string paramData = sb.ToString().Trim('&'); byte[] data = System.Text.Encoding.UTF8.GetBytes(paramData); //设置post方式 request.Method = "post"; //这句不能少 不难post请求 得不到对应的响应结果 request.ContentType = "application/x-www-form-urlencoded"; //设置请求参数的长度 request.ContentLength = data.Length; Stream stream = request.GetRequestStream(); stream.Write(data, 0, data.Length); stream.Close(); /** * *****************注意事项******************** * * 不管是get还是post请求最后得到的响应流不能直接stream * 不难得不到响应结果 * * * 直接使用Stream 不能获取响应的结果值 * * 要使用StreamReader才能获取响应的结果值 * * Stream stream = response.GetResponseStream(); * * byte[] data = new byte[2*1024*1024] * * int r = stream.Read(data,0,data.Length); * * string result = System.Text.Encoding.UTF8.GetString(data, 0, r); * * * **/ HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { string result = sr.ReadToEnd(); return result; } } /// <summary> /// 发出GET请求 /// </summary> /// <param name="Url">请求URL</param> /// <param name="heades">信息头</param> /// <returns></returns> public static string HttpGetByHeader(string Url, WebHeaderCollection heades) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); //添加信息头(header) request.Headers = heades; request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; using (var response = request.GetResponse()) { Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); string retString = myStreamReader.ReadToEnd(); return retString; } } }
HTTPS post请求:
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; namespace ConsoleAppTest { public class HttpsHelper { private static readonly string DefaultUserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"; private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } public static HttpWebResponse PostHttps(string url,string headers, IDictionary<string, string> parameters, Encoding charset) { HttpWebRequest request = null; CookieContainer cookie = new CookieContainer(); //HTTPSQ请求 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = cookie; request.ProtocolVersion = HttpVersion.Version11; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = DefaultUserAgent; request.KeepAlive = true; request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9"; request.Headers["token"] = headers; //request.Headers["Cookie"] = "username=aaaaaa; Language=zh_CN"; //如果需要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, WebUtility.UrlEncode(parameters[key])); } else { buffer.AppendFormat("{0}={1}", key, WebUtility.UrlEncode(parameters[key])); } i++; } byte[] data = charset.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return (HttpWebResponse)request.GetResponse(); } public static string PostJsonByHttps(string url, string headers, string jsonParams) { HttpWebRequest request = null; CookieContainer cookie = new CookieContainer(); //HTTPSQ请求 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = cookie; request.ProtocolVersion = HttpVersion.Version11; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = DefaultUserAgent; request.KeepAlive = true; request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9"; request.Headers["token"] = headers; //request.Headers["Cookie"] = "username=aaaaaa; Language=zh_CN"; //如果需要POST数据 request.ContentType = "application/json;charset=UTF-8"; byte[] byteData = Encoding.UTF8.GetBytes(jsonParams); int length = byteData.Length; request.ContentLength = length; using (Stream stream = request.GetRequestStream()) { stream.Write(byteData, 0, byteData.Length); } var response = (HttpWebResponse)request.GetResponse(); using (StreamReader st = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { return st.ReadToEnd().ToString(); } } } }
http测试代码:
[HttpGet] public ActionResult Test() { string url = "http://192.168.2.250:8092/Spread/Campaign/GetCampaignId?campaignName=string"; WebHeaderCollection header = new WebHeaderCollection(); header["Token"] = "AF4DAFC2-1E76-4864-AE5B-AE0FB73C64EF"; string result = Common.HttpTools.HttpGetByHeader(url, header); return Content(result); } public ActionResult TestPost() { string url = "http://192.168.2.250:8092/Spread/Campaign/CreateCampaign"; CampaignArgsModel model = new CampaignArgsModel() { CampaignName = "TestPost", FromEmail = "786483815@qq.com", From = "From", Content = "Content", Interval = 1, Signature = "1", Subject = "Subject", Schedule = DateTime.Now, Categories = new List<string>() { "TestPost" }, }; string param = JsonConvert.SerializeObject(model); WebHeaderCollection header = new WebHeaderCollection(); header["Token"] = "AF4DAFC2-1E76-4864-AE5B-AE0FB73C64EF"; string result = Common.HttpTools.HttpPostByJson(url, param, header); return Content(result); }
HTTPS 测试代码:
string token = ""; string tidNo = ""; string editUser = ""; string hardSerial = ""; var abcObject = new { token = token, tidNo = tidNo, editUser = editUser, hardSerial = hardSerial }; string serJson = JsonConvert.SerializeObject(abcObject); string result = HttpsHelper.PostJsonByHttps(submitUrl, token, serJson); return result;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix