http 请求post,get

一、http 请求post,get区别如下:

区别一:语义上的区别

1、Get向服务器请求数据。依照HTTP协议,get 是用来请求数据。

2、Post向服务器发数据。依照HTTP协议,Post的语义是向服务器添加数据,也就是说按照Post的语义,该操作是会修改服务器上的数据的。

区别二:服务器请求的区别

1、Get请求是可以被缓存的,举个例子,你访问baidu.com,就是向baidu的服务器发了个Get请求,这个请求的返回,也就是baidu的主页页面内容,会被缓存在你浏览器中,短时间再次访问,其实是拿到的浏览器中的缓存内容。另外Get请求只能接收ASCII码的回复

2、Post请求是不可以被缓存的。对于Post方式提交表单,刷新页面浏览器会弹出提示框  “是否重新提交表单”,Post可以接收二进制等各种数据形式,所以如果要上传文件一般用Post请求。

区别三:参数放请求头和请求体的差别

1、Get请求通常没有请求体(当然这也是可以由程序猿心情改变的),在TCP传输中只需传输一次(而不是一个包),所以Get请求效率相对高。

2、Post请求将数据放在请求体中,而实际传输中,会先传输完请求头,再传输请求体,是分为两次传输的(而不是两个包)。Post请求头会比Get更小(一般不带参数),请求头更容易在一个TCP包中完成传输,更何况请求头中有Content-Length的标识,可以更好地保证Http包的完整性。

二、post 请求头和请求参数的格式关系如下: 

三, 请求方法 如下:

      /// <summary>
        /// get请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static string HttpGet(string url, string token)
        {
            string responseStr = "";
            try
            {
                JHLog.Instance().Writelog("请求地址:" + url);
                WebRequest myWebRequest = WebRequest.Create(url);
                myWebRequest.Headers.Add("authorization", token);
                WebResponse myWebResponse = myWebRequest.GetResponse();
                Stream ReceiveStream = myWebResponse.GetResponseStream();
                if (ReceiveStream != null)
                {
                    StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8);
                    responseStr = reader.ReadToEnd();
                    reader.Close();
                }
                myWebResponse.Close();
            }
            catch (Exception ex)
            {
                JHLog.Instance().Writelog("验证token报错ex:" + ex.Message);
            }
            return responseStr;
        }

        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="strUrl">url</param>
        /// <param name="strHeader">ContentType</param>
        /// <param name="strCode">系统code</param>
        /// <param name="strToken">token</param>
        /// <returns></returns>
        private static string HttpPost(string strUrl,string param = "")
        {
            //返回值
            string responseString = string.Empty;
            try
            {

                string retString = string.Empty;
                JHLog.Instance().Writelog("请求地址:" + strUrl + ",请求参数:" + param);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
                request.Method = "POST";
                //request.ContentType = "application/x-www-form-urlencoded"; 
                request.ContentType = "application/json";
                byte[] data = Encoding.UTF8.GetBytes(param);//把字符串转换为字节
                request.ContentLength = data.Length; //请求长度
                using (Stream reqStream = request.GetRequestStream()) //获取
                {
                    reqStream.Write(data, 0, data.Length);//向当前流中写入字节
                    reqStream.Close(); //关闭当前流
                }

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();//响应结果
                responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
            catch (Exception ex)
            {
                JHLog.Instance().Writelog("SendHttpRequest时发生问题: " + ex.Message);
            }
            return responseString;
        }

带请求头的post请求

        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="strUrl">url</param>
        /// <param name="strHeader">ContentType</param>
        /// <param name="strCode">系统code</param>
        /// <param name="strToken">token</param>
        /// <returns></returns>
        private static string SendHttpRequest(string strUrl, string param)
        {
            //返回值
            string responseString = string.Empty;
            try
            {
                string retString = string.Empty;
                JHLog.Instance().Writelog("请求地址:" + strUrl + ",请求参数:" + param);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
                SetHeaderValue(request.Headers, "appCode", "appCode");
                SetHeaderValue(request.Headers, "accessToken", "accessToken");

                request.Method = "POST";
                request.ContentType = " application/json;charset=UTF-8 ";
                byte[] data = Encoding.UTF8.GetBytes(param);//把字符串转换为字节
                request.ContentLength = data.Length; //请求长度
                using (Stream reqStream = request.GetRequestStream()) //获取
                {
                    reqStream.Write(data, 0, data.Length);//向当前流中写入字节
                    reqStream.Close(); //关闭当前流
                }

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();//响应结果
                responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
            catch (Exception ex)
            {
                JHLog.Instance().Writelog("SendHttpRequest时发生问题: " + ex.Message);
            }
            return responseString;
        }

    private static void SetHeaderValue(WebHeaderCollection header, string name, string value)
        {
            var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
            if (property != null)
            {
                var collection = property.GetValue(header, null) as NameValueCollection;
                collection[name] = value;
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值