c# HttpHelper类 Http请求通用方法

下面是HttpHelper类

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Web;
 
namespace HttpHelperNamespace
{
    public static class HttpHelper
    {
 
        /// <summary>
        /// http/https请求响应
        /// </summary>
        /// <param name="getOrPost"></param>
        /// <param name="url">地址(要带上http或https)</param>
        /// <param name="headers">请求头</param>
        /// <param name="parameters">提交数据</param>
        /// <param name="dataEncoding">编码类型 utf-8</param>
        /// <param name="contentType">application/x-www-form-urlencoded</param>
        /// <returns></returns>
        public static HttpWebResponse HttpRequest(
            string getOrPost,
            string url,
            Dictionary<string, string> headers,
            Dictionary<string, string> parameters,
            Encoding dataEncoding,
            string contentType
            )
        {
            var request = CreateRequest(getOrPost, url, headers, parameters, dataEncoding, contentType);
 
            //如果需要POST数据  
            if (getOrPost == "POST" && !(parameters == null || parameters.Count == 0))
            {
                var data = FormatPostParameters(parameters, dataEncoding, contentType);
 
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                    stream.Close();
                }
            }
 
            WebResponse Res = null;
            try
            {
                Res = request.GetResponse();
            }
            catch (WebException ex)
            {
                Res = (HttpWebResponse)ex.Response;
            }
            catch (Exception e)
            {
                throw e;
            }
 
            if (null == Res) {
                return request.GetResponse() as HttpWebResponse;
            }
                
            return (HttpWebResponse)Res;
        }
 
 
        /// <summary>
        /// 创建HTTP请求对象
        /// </summary>
        /// <param name="getOrPost"></param>
        /// <param name="url"></param>
        /// <param name="headers"></param>
        /// <param name="parameters"></param>
        /// <param name="paraEncoding"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        private static HttpWebRequest CreateRequest(
            string getOrPost
            , string url
            , Dictionary<string, string> headers
            , Dictionary<string, string> parameters
            , Encoding paraEncoding
            , string contentType
            )
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }
 
            if (parameters != null && parameters.Count > 0 && paraEncoding == null)
            {
                throw new ArgumentNullException("requestEncoding");
            }
 
            HttpWebRequest request = null;
            //判断是否是https  
            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback =
                    new RemoteCertificateValidationCallback(CheckValidationResult);
                request = WebRequest.Create(url) as HttpWebRequest;
                request.ProtocolVersion = HttpVersion.Version10;
            }
            else
            {
                request = WebRequest.Create(url) as HttpWebRequest;
            }
 
            if (getOrPost == "GET")
            {
                request.Method = "GET";
 
                if (parameters != null && parameters.Count > 0)
                {
                    url = FormatGetParametersToUrl(url, parameters, paraEncoding);
                }
            }
            else
            {
                request.Method = "POST";
            }
 
            if (contentType == null)
            {
                request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            }
            else
            {
                request.ContentType = contentType;
            }
 
            //POST的数据大于1024字节的时候,如果不设置会分两步
            request.ServicePoint.Expect100Continue = false;
            request.ServicePoint.ConnectionLimit = int.MaxValue;
 
            if (headers != null)
            {
                FormatRequestHeaders(headers, request);
            }
 
            return request;
        }
 
 
        /// <summary>
        /// 格式化请求头信息
        /// </summary>
        /// <param name="headers"></param>
        /// <param name="request"></param>
        private static void FormatRequestHeaders(Dictionary<string, string> headers, HttpWebRequest request)
        {
            foreach (var hd in headers)
            {
                //因为HttpWebRequest中很多标准标头都被封装成只能通过属性设置,添加的话会抛出异常
                switch (hd.Key.ToLower())
                {
                    case "connection":
                        request.KeepAlive = false;
                        break;
                    case "content-type":
                        request.ContentType = hd.Value;
                        break;
                    case "transfer-enconding":
                        request.TransferEncoding = hd.Value;
                        break;
                    default:
                        request.Headers.Add(hd.Key, hd.Value);
                        break;
                }
            }
        }
 
 
        /// <summary>
        /// 格式化Get请求参数
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="parameters">参数</param>
        /// <param name="paraEncoding">编码格式</param>
        /// <returns></returns>
 
        private static string FormatGetParametersToUrl(string url, Dictionary<string, string> parameters, Encoding paraEncoding)
        {
            if (url.IndexOf("?") < 0)
                url += "?";
            int i = 0;
            string sendContext = "";
            foreach (var parameter in parameters)
            {
                if (i > 0)
                {
                    sendContext += "&";
                }
 
                sendContext += HttpUtility.UrlEncode(parameter.Key, paraEncoding)
                       + "=" + HttpUtility.UrlEncode(parameter.Value, paraEncoding);
                ++i;
            }
 
            url += sendContext;
            return url;
        }
 
 
        /// <summary>
        /// 格式化Post请求参数
        /// </summary>
        /// <param name="parameters">编码格式</param>
        /// <param name="dataEncoding">编码格式</param>
        /// <param name="contentType">类型</param>
        /// <returns></returns>
        private static byte[] FormatPostParameters(Dictionary<string, string> parameters, Encoding dataEncoding, string contentType)
        {
            string sendContext = "";
            int i = 0;
            if (!string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json")
            {
                sendContext = "{";
            }
 
            foreach (var para in parameters)
            {
                if (!string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json")
                {
                    if (i > 0)
                    {
                        if (para.Value.StartsWith("{"))
                        {
                            sendContext += string.Format(@",""{0}"":{1}", para.Key, para.Value);
                        }
                        else
                        {
                            sendContext += string.Format(@",""{0}"":""{1}""", para.Key, para.Value);
                        }
 
                    }
                    else
                    {
                        if (para.Value.StartsWith("{"))
                        {
                            sendContext += string.Format(@"""{0}"":{1}", para.Key, para.Value);
                        }
                        else
                        {
                            sendContext += string.Format(@"""{0}"":""{1}""", para.Key, para.Value);
                        }
 
                    }
                }
                else
                {
                    if (i > 0)
                    {
                        sendContext += string.Format("&{0}={1}", para.Key, HttpUtility.UrlEncode(para.Value, dataEncoding));
                    }
                    else
                    {
                        sendContext = string.Format("{0}={1}", para.Key, HttpUtility.UrlEncode(para.Value, dataEncoding));
                    }
                }
 
                i++;
            }
 
            if (!string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json")
            {
                sendContext += "}";
            }
 
            byte[] data = dataEncoding.GetBytes(sendContext);
            return data;
        }
 
 
        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain,
            SslPolicyErrors errors)
        {
            return true; //总是接受  
        }
    }
}

调用方法:

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Text;
using System.Web;
 
namespace HttpHelperNamespace
{
    public  class HttpTest
    {
        public  void Test()
        {
            //GET http://interface.sina.cn/wap_api/layout_col.d.json?&showcid=56261
            var reqGET = HttpHelper.HttpRequest(
                 "GET"    //string getOrPost,
                , "http://interface.sina.cn/wap_api/layout_col.d.json?&showcid=56261"    //string url,
                , null    //List < KeyValuePair < string, string >> headers,
                , null    //List < KeyValuePair < string, string >> parameters,
                , Encoding.UTF8                    //Encoding dataEncoding,
                , "application/x-www-form-urlencoded;charset=utf-8"                                   //string contentType
                );
 
            System.IO.StreamReader readerGET;
            readerGET = new System.IO.StreamReader(reqGET.GetResponseStream(), Encoding.UTF8);
            var respHTML = readerGET.ReadToEnd();  //得到响应结果
            readerGET.Close();
            reqGET.Close();
 
            
 
            POST http://interface.sina.cn/wap_api/layout_col.d.json?&showcid=56261
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("showcid", "56261");
 
            var reqPOST = HttpHelper.HttpRequest(
                 "POST"    //string getOrPost,
                , "http://interface.sina.cn/wap_api/layout_col.d.json"    //string url,
                , null    //List < KeyValuePair < string, string >> headers,
                , dict    //List < KeyValuePair < string, string >> parameters,
                , Encoding.UTF8                    //Encoding dataEncoding,
                , "application/x-www-form-urlencoded;charset=utf-8"                                   //string contentType
                );
 
            System.IO.StreamReader readerPOST;
            readerPOST = new System.IO.StreamReader(reqPOST.GetResponseStream(), Encoding.UTF8);
            var respHTMLPOST = readerPOST.ReadToEnd(); //得到响应结果
            readerPOST.Close();
            reqPOST.Close();
 
        }  
    }
}

 

原文连接:https://blog.csdn.net/sinat_16998945/article/details/84071384

 

其他访问方式:使用 HttpClinet 类

请求方式1:

//登录地址
String LoginHost = BaseHost + Login_Request_Url;
//创建 HttpClient 对象
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("account", Account));
paraList.Add(new KeyValuePair<string, string>("password", Password));

HttpResponseMessage response = client.PostAsync(LoginHost, new FormUrlEncodedContent(paraList)).Result;  //登录
//获取请求结果,字符串
String result = response.Content.ReadAsStringAsync().Result;
//将json字符串内容转成 model 
LoginModel Model= JsonConvert.DeserializeObject<LoginModel>(result);//解析结果 
String jsession = Model.jsession;

请求方式2

封装 httpClient 请求

public string GetResponse(string url, out string statusCode)
{
    
    string result = string.Empty;

    using (HttpClient httpClient = new HttpClient())
    {
       httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

       HttpResponseMessage response = httpClient.GetAsync(url).Result;
       statusCode = response.StatusCode.ToString();

       if (response.IsSuccessStatusCode)
       {
           //result = response.Content.ReadAsStringAsync().Result;
            Stream myResponseStream = response.Content.ReadAsStreamAsync().Result;
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            result = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
         }
    }
   return result;
}

调用 getResponse() 方法

//获取设备在线状态
//http://192.168.0.1/getDeviceOlStatus.action?jsession=123456&devIdno=123

string OneKeyAlarm = BaseHost + DevOnlineState_Request_Url;
string url1 = OneKeyAlarm + "?jsession=" + Jsession + "&DevIDNO=" + DevIDNO;

string sresult1 = string.Empty;
string result1 = GetResponse(url1, out sresult1);
if (result1 != null && result1 != "")
{
    //json字符串转成 对象
    Response response = JsonConvert.DeserializeObject<Response>(result1);//解析结果
    //操作成功
    if (response.result == 0 )
    {
                  
        //处理数据           
    }
    else
   {
                  
   }

}

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C是一个在计算机科学中非常重要的编程语言。它是一种通用编程语言,广泛用于开发各种应用程序和系统软件。C语言是由贝尔实验室的Dennis Ritchie于20世纪70年代初开发的,它结合了高级语言和低级语言的特点,具有高效性和可移植性。C语言具有简单的语法结构,易于学习和理解。它提供了丰富的函数库,使得开发者可以方便地调用各种功能和实现各种算法。 C语言被广泛应用于各个领域,包括操作系统、嵌入式系统、游戏开发、网络编程等。由于C语言的高效性和底层控制能力,它常用于开发对性能要求较高的应用,如实时系统和图形处理。C语言也是许多其他编程语言的基础,如C++、Java和Python等。学习C语言有助于理解计算机底层原理和编程思想,为进一步学习其他编程语言打下坚实的基础。 与其他编程语言相比,C语言相对简洁和灵活。它不提供高级抽象特性,强调对内存的直接控制,因此可以更好地优化代码执行速度和节省内存空间。然而,C语言也有一些缺点,如手动内存管理可能导致内存泄漏和访问越界等问题,使用C语言需要更加谨慎和注意细节。 总之,C语言是一种功能强大且灵活的编程语言,它在计算机科学领域有着广泛的应用。学习C语言可以培养编程思维和动手能力,为进一步深入学习编程打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值