.Net/C#中Http請求訪問Help類

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace _SCscHero.Base.Help
{
    public class HttpHelp
    {
        /// <summary>
        /// url爲請求的網址,param參數爲需要查詢的條件(服務端接收的參數,沒有則爲null)
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static string Get(string url, Dictionary<string, string> param = null, Dictionary<string, string> headers = null)
        {
            if (param != null) //有參數的情況下,拼接url
            {
                url = url + "?";
                url = param.Aggregate(url, (current, item) => current + item.Key + "=" + item.Value + "&");
                url = url.Substring(0, url.Length - 1);
            }

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;//創建請求
            request.Method = "GET"; //請求方法爲GET
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    request.Headers[item.Key] = item.Value;
                }
            }
            HttpWebResponse res; //定義返回的response
            try
            {
                res = (HttpWebResponse)request.GetResponse(); //此處發送了請求並獲得響應
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string content = sr.ReadToEnd(); //響應轉化爲String字符串
            return content;
        }

        /// <summary>
        /// url爲請求的網址,param爲需要傳遞的參數
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static string Post(string url, Dictionary<String, String> param, Dictionary<string, string> headers = null)
        {
            #region 寫日記
            string parameterSt = "";
            if (param.Count != 0) //將參數添加到json對象中
            {
                foreach (var item in param)
                {
                    parameterSt += "&" + item.Key + "=" + item.Value;
                }
            }

            #endregion

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            //request.AllowReadStreamBuffering = true;
            request.MaximumResponseHeadersLength = 1024;
            request.Method = "POST"; //請求方式爲post
            request.AllowAutoRedirect = true;
            request.MaximumResponseHeadersLength = 1024;
            request.ContentType = "application/json";
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    request.Headers[item.Key] = item.Value;
                }
            }

            JObject json = new JObject();
            if (param.Count != 0) //將參數添加到json對象中
            {
                foreach (var item in param)
                {
                    json.Add(item.Key, item.Value);
                }
            }
            string jsonstring = json.ToString();//獲得參數的json字符串
            byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
            Stream postStream = request.GetRequestStream();
            postStream.Write(jsonbyte, 0, jsonbyte.Length);
            postStream.Close();
            //發送請求並獲取相應迴應數據       
            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string content = sr.ReadToEnd(); //獲得響應字符串
            return content;
        }

        /// <summary>
        /// url爲請求的網址,param爲需要傳遞的參數
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static string Post(string url, Dictionary<String, object> param, Dictionary<string, string> headers = null)
        {
            #region 寫日記
            string parameterSt = "";
            if (param.Count != 0) //將參數添加到json對象中
            {
                foreach (var item in param)
                {
                    parameterSt += "&" + item.Key + "=" + item.Value;
                }
            }

            #endregion

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            //request.AllowReadStreamBuffering = true;
            request.MaximumResponseHeadersLength = 1024;
            request.Method = "POST"; //請求方式爲post
            request.AllowAutoRedirect = true;
            request.MaximumResponseHeadersLength = 1024;
            request.ContentType = "application/json";
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    request.Headers[item.Key] = item.Value;
                }
            }

            string jsonstring = string.Empty;//獲得參數的json字符串
            if (param.Count != 0) //將參數添加到json對象中
            {
                jsonstring = JsonConvert.SerializeObject(param);
            } 

            byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
            Stream postStream = request.GetRequestStream();
            postStream.Write(jsonbyte, 0, jsonbyte.Length);
            postStream.Close();
            //發送請求並獲取相應迴應數據       
            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string content = sr.ReadToEnd(); //獲得響應字符串
            return content;
        }

        /// <summary>
        /// url爲請求的網址,param爲需要傳遞的參數 返回文件類型數據
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="paramStr"></param>
        /// <returns></returns>
        public static MemoryStream PostFile(string url, Dictionary<String, object> param, string paramStr = null)
        {

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            //request.AllowReadStreamBuffering = true;
            request.MaximumResponseHeadersLength = 1024;
            request.Method = "POST"; //請求方式爲post
            request.AllowAutoRedirect = true;
            request.MaximumResponseHeadersLength = 1024;
            request.ContentType = "application/json";

            string jsonstring = string.Empty;
            if (string.IsNullOrEmpty(paramStr))
            {
                if (param != null)
                {
                    jsonstring = JsonConvert.SerializeObject(param);
                }
            }
            else
            {
                jsonstring = paramStr;
            }

            byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
            Stream postStream = request.GetRequestStream();
            postStream.Write(jsonbyte, 0, jsonbyte.Length);
            postStream.Close();
            //發送請求並獲取相應迴應數據       
            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            Stream resultStream = res.GetResponseStream();
            MemoryStream ms = new MemoryStream();
            byte[] buffer = new byte[1024];
            while (true)
            {
                int sz = resultStream.Read(buffer, 0, 1024);
                if (sz == 0) break;
                ms.Write(buffer, 0, sz);
            }
            //string content = Encoding.UTF8.GetString(ms.ToArray()); 
            return ms;
        }

        /// <summary>
        /// url爲請求的網址,param爲需要傳遞的參數
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static string Post(string url, string param, Dictionary<string, string> headers = null)
        {
            #region 寫日記
            string parameterSt = param;
            #endregion

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            //request.AllowReadStreamBuffering = true;
            request.MaximumResponseHeadersLength = 1024;
            request.Method = "POST"; //請求方式爲post
            request.AllowAutoRedirect = true;
            request.MaximumResponseHeadersLength = 1024;
            request.ContentType = "application/json";
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    request.Headers[item.Key] = item.Value;
                }
            }  
            string jsonstring = param;//獲得參數的json字符串
            byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
            Stream postStream = request.GetRequestStream();
            postStream.Write(jsonbyte, 0, jsonbyte.Length);
            postStream.Close();
            //發送請求並獲取相應迴應數據       
            HttpWebResponse res;
            try
            {
                res = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                res = (HttpWebResponse)ex.Response;
            }
            StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
            string content = sr.ReadToEnd(); //獲得響應字符串
            return content;
        }

        #region 獲取IP地址
        /// <summary>
        /// 獲取IP地址
        /// </summary>
        /// <returns></returns>
        public static string GetIpAddress(HttpContext context)
        {
            string result = String.Empty;

            string IP = context.Connection.RemoteIpAddress.ToString();
            if (!string.IsNullOrEmpty(IP))
            {
                string[] ips = IP.Split(':');
                result = ips[ips.Length - 1];
            }
            return result;
        }
        #endregion
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章