C# 发起普通http请求

本文介绍了一个用于处理HTTP请求的工具类,包括GET和POST请求的方法实现。该类支持参数构造、编码处理、错误捕获等功能,并提供了简洁的接口来发送请求及获取响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class NetHelper
    {
        private static NetHelper _instance = new NetHelper();


        public static NetHelper Instance
        {
            get
            {
                return _instance;
            }
        }


        /// <summary>
        /// POST请求
        /// </summary>
        /// <param name="url">要请求的地址</param>
        /// <param name="parameters">要传递的参数</param>
        /// <param name="timeout">默认超时时间设置</param>
        /// <returns></returns>
        public string DoPost(string url, IDictionary<string, string> parameters, int timeout = 20000)
        {
            try
            {
                HttpWebRequest request = this.GetWebRequest(url, "POST", timeout);
              
                byte[] buffer = Encoding.UTF8.GetBytes(this.BuildQuery(parameters));
                request.ContentLength = buffer.Length;


                Stream stream = request.GetRequestStream();
                stream.Write(buffer, 0, buffer.Length);
                stream.Close();


                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Encoding encoding = this.GetEncoding(response.CharacterSet);
                return GetResponseAsString(response, encoding);
            }
            catch (Exception ex)
            {


            }


            return string.Empty;
        }


        /// <summary>
        /// GET请求
        /// </summary>
        /// <param name="url">要请求的地址</param>
        /// <param name="parameters">要传递的参数</param>
        /// <param name="timeout">默认超时时间</param>
        /// <returns></returns>
        public string DoGet(string url, IDictionary<string, string> parameters, int timeout = 20000)
        {
            try
            {
                if (parameters != null && parameters.Count > 0)
                {
                    if (url.Contains("?"))
                    {
                        url = url + "&" + BuildQuery(parameters);
                    }
                    else
                    {
                        url = url + "?" + BuildQuery(parameters);
                    }
                }


                HttpWebRequest request = GetWebRequest(url, "GET", timeout);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //Encoding encoding = this.GetEncoding(response.CharacterSet);
                Encoding encoding = Encoding.UTF8;
                return GetResponseAsString(response, encoding);
            }
            catch (Exception ex)
            {


            }


            return string.Empty;
        }


        /// post 请求
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="data">地址后面的参数</param>
        /// <param name="content">post数据内容</param>
        /// <returns></returns>
        public string RequestPost(string url, string content, bool isJson = false)
        {
            string result = "";
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            HttpWebRequest request = GetHttpWebRequest(url, bytes.Length, isJson);
            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(bytes, 0, bytes.Length);
            }
            using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8))
            {
                result = reader.ReadToEnd().ToString();
            }
            return result;
        }      

        private HttpWebRequest GetWebRequest(string url, string method, int timeout = 20000)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Timeout = timeout;
            request.ServicePoint.Expect100Continue = false;
            request.KeepAlive = true;
            request.Method = method;
            request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
            request.Headers.Add("content", "text/html; charset=utf-8");
            //request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)";

            return request;
        }


        /// <summary>
        /// 组装普通文本请求参数。
        /// </summary>
        /// <param name="parameters">Key-Value形式请求参数字典</param>
        /// <returns>URL编码后的请求数据</returns>
        private string BuildQuery(IDictionary<string, string> parameters)
        {
            if (null == parameters)
                return "";


            StringBuilder data = new StringBuilder();
            bool flag = false;


            IEnumerator<KeyValuePair<string, string>> temp = parameters.GetEnumerator();
            while (temp.MoveNext())
            {
                string name = temp.Current.Key;
                string value = temp.Current.Value;
                // 忽略参数名或参数值为空的参数
                if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                {
                    if (flag)
                    {
                        data.Append("&");
                    }


                    data.Append(name);
                    data.Append("=");
                    data.Append(System.Web.HttpUtility.UrlEncode(value, Encoding.UTF8));
                    flag = true;
                }
            }

            return data.ToString();
        }


        private Encoding GetEncoding(string character)
        {
            if (string.IsNullOrEmpty(character))
                return Encoding.UTF8;
            return Encoding.GetEncoding(character);
        }


        /// <summary>
        /// 把响应流转换为文本。
        /// </summary>
        /// <param name="rsp">响应流对象</param>
        /// <param name="encoding">编码方式</param>
        /// <returns>响应文本</returns>
        public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
        {
            Stream stream = null;
            StreamReader reader = null;
            string result = string.Empty;


            try
            {
                // 以字符流的方式读取HTTP响应
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                result = reader.ReadToEnd();
            }
            finally
            {
                // 释放资源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
            return result;

        }

    }



C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#关于Session的操作,获取Session,设置Session,删除Session使用方便,只需要调用方法就可以了 SessionHelper2 C#关于Session的一些高级操作,比如取Session对象,取Session数据等等 3.CSV文件转换 CsvHelper CSV文件导入DataTable和DataTable导出到Csv文件等操作 4.DEncrypt 加密/解密帮助类 DEncrypt C#DEncrypt加密/DEncrypt解密帮助类 ,多种方式,可以设置Key DESEncrypt C#DESEncrypt加密/DESEncrypt解密帮助类 ,多种方式,可以设置Key Encrypt C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security Base64/Security文件加密,以及一些常用的操作方法 RSACryption RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient   FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper FTPHelper-FTP帮助类,FTP常用操作方法,添加文件,删除文件等 FTPOperater FTP操作帮助类,方法比较多,比较实用 6.JS操作类 JsHelper JsHelper--Javascript操作帮助类,输出各种JS方法,方便不懂JS的人使用,减少代码量 7.JSON 转化类 ConvertJson List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 8.Mime MediaTypes 电子邮件类型帮助类,规定是以Xml,HTML还是文本方式发送邮件 MimeEntity Mime实体帮助类 MimeHeaders mime的Header帮助类 MimeReader mime读取帮助类 QuotedPrintableEncoding mimeEncoding帮助类 9.PDF 转化类 PDFOperation PDFOperation--C#PDF文件操作帮助类 类主要功能有1.构造函数2.私有字段3.设置字体4.设置页面大小 5.实例化文档6.打开文档对象7.关闭打开的文档8.添加段落9.添加图片10.添加链接、点 等功能 10.ResourceManager 操作类 AppMessage app消息格式化类,返加字符串帮助类 ResourceManager C#一个操作Resource的帮助类 ResourceManagerWrapper Resources 操作Resources的帮助类,使用Api的方式 Sample.xml 11.XML操作类 XmlHelper 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作和操作后进行保存的功能。 XMLProcess 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作的功能。 12.弹出消息类 MessageBox JS弹出信息帮助类 ShowMessageBox 相对于MessageBox更丰富的提示类 13.导出Excel 操作类 DataToExcel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值