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;

 

posted @ 2014-12-04 21:19  好学Ace  阅读(4193)  评论(0编辑  收藏  举报