httpRequest(調用接口)

using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;

namespace SCB.OrderSorting.BLL.Common
{
public class HttpHelper
{
private string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";//"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
Encoding WebEncoding = Encoding.UTF8;

    public HttpHelper() { }
    public HttpHelper(Encoding _encoding)
    {
        WebEncoding = _encoding;
    }

    /// <summary>
    /// 處理網絡連接
    /// </summary>
    /// <param name="Url">Url連接</param>
    /// <param name="PostData">參數</param>
    /// <param name="Method">訪問類型(GET/POST)</param>
    /// <param name="select">數據訪問類型(select/update/insert/delete)</param>
    /// <returns></returns>
    public string QueryData(string Url, string PostData, string Method, SelectType select = SelectType.Select, string guid = null)
    {
        var begTime = DateTime.Now;

        int TryCount = 0;
        reTry:
        try
        {
            HttpWebRequest httpRequest;

            if (Method.ToLower() == "post")
            {
                httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
            }
            else
            {
                if (string.IsNullOrEmpty(PostData))
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
                }
                else
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url + "?" + PostData.Trim());
                }

            }

            httpRequest.Method = Method.ToUpper();
            //httpRequest.CookieContainer = cc;
            // httpRequest.Headers.Set("Accept-Language", "en-us");
            if (Method.ToLower() == "post")
            {
                httpRequest.ContentLength = PostData.Length;
            }
            //httpRequest.Timeout = 60000;
            httpRequest.ContentType = "application/x-www-form-urlencoded";
            //httpRequest.Headers.Add("UA-CPU", "x86");
            httpRequest.Accept = "*/*";
            httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            //httpRequest.Headers.Add("Accept-Encoding", "deflate,sdch");
            httpRequest.UserAgent = userAgent;
            if (!Url.Contains("FeesBiling"))
            {
                httpRequest.AutomaticDecompression = DecompressionMethods.GZip;
            }
            //httpRequest.KeepAlive = true;
            //httpRequest.AllowWriteStreamBuffering = true;

            if (Method.ToLower() == "post")
            {
                //Encoding encoding = Encoding.GetEncoding("utf-8");
                byte[] bytesToPost = WebEncoding.GetBytes(PostData);
                httpRequest.ContentLength = bytesToPost.Length;
                Stream requestStream = httpRequest.GetRequestStream();
                requestStream.Write(bytesToPost, 0, bytesToPost.Length);
                requestStream.Close();
            }
            HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();

            Stream responseStream = Gzip(response);

            //response.Cookies = cc.GetCookies(httpRequest.RequestUri);
            StreamReader sr = new StreamReader(response.GetResponseStream(), WebEncoding);
            string reStr = sr.ReadToEnd();
            sr.Close();
            response.Close();

            //日志
            TimeSpan a = DateTime.Now - begTime;
            if (a.Milliseconds > 500)
            {
                SaveErrLogHelper.SaveErrorLog(
string.Format("運行時間:{0}-{1}.請求方式:{2},共耗時{3}毫秒", begTime.ToString("mm:ss.ffffzzz"), DateTime.Now.ToString("mm:ss.ffffzzz"), Method, a), string.Format("url:{0}\r\ndata:{1}", Url, PostData));

            }
            return reStr;
        }
        catch (Exception ex)
        {
            if (!string.IsNullOrEmpty(guid))
            {
                SaveErrLogHelper.ErrorMsgLog[guid] = ex.Message;
            }
            TryCount++;
            if (TryCount < 2 && select == SelectType.Select)
            {
                Thread.CurrentThread.Join(500);
                goto reTry;
            }
            else
            {
                SaveErrLogHelper.SaveErrorLog(string.Format("Url={0},PostData={1},Method={2},select={3}", Url, PostData, Method, select), ex.ToString());
                return string.Empty;
            }
        }

    }
    public string QueryData(string Url, string PostData, string Method, Dictionary<string,string> headData, SelectType select = SelectType.Select, string guid = null)
    {
        var begTime = DateTime.Now;

        int TryCount = 0;
        reTry:
        try
        {
            HttpWebRequest httpRequest;

            if (Method.ToLower() == "post")
            {
                httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
            }
            else
            {
                if (string.IsNullOrEmpty(PostData))
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
                }
                else
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url + "?" + PostData.Trim());
                }

            }

            httpRequest.Method = Method.ToUpper();
            //httpRequest.CookieContainer = cc;
            // httpRequest.Headers.Set("Accept-Language", "en-us");
            if (Method.ToLower() == "post")
            {
                httpRequest.ContentLength = PostData.Length;
            }
            //httpRequest.Timeout = 60000;
            httpRequest.ContentType = "application/x-www-form-urlencoded";
            //httpRequest.Headers.Add("UA-CPU", "x86");
            httpRequest.Accept = "*/*";
            httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            foreach(var head in headData)
            {
                httpRequest.Headers.Add(head.Key, head.Value);
            }
            //httpRequest.Headers.Add("Accept-Encoding", "deflate,sdch");
            httpRequest.UserAgent = userAgent;
            if (!Url.Contains("FeesBiling"))
            {
                httpRequest.AutomaticDecompression = DecompressionMethods.GZip;
            }
            //httpRequest.KeepAlive = true;
            //httpRequest.AllowWriteStreamBuffering = true;

            if (Method.ToLower() == "post")
            {
                //Encoding encoding = Encoding.GetEncoding("utf-8");
                byte[] bytesToPost = WebEncoding.GetBytes(PostData);
                httpRequest.ContentLength = bytesToPost.Length;
                Stream requestStream = httpRequest.GetRequestStream();
                requestStream.Write(bytesToPost, 0, bytesToPost.Length);
                requestStream.Close();
            }
            HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();

            Stream responseStream = Gzip(response);

            //response.Cookies = cc.GetCookies(httpRequest.RequestUri);
            StreamReader sr = new StreamReader(response.GetResponseStream(), WebEncoding);
            string reStr = sr.ReadToEnd();
            sr.Close();
            response.Close();

            //日志
            TimeSpan a = DateTime.Now - begTime;
            if (a.Milliseconds > 500)
            {
                SaveErrLogHelper.SaveErrorLog(
string.Format("運行時間:{0}-{1}.請求方式:{2},共耗時{3}毫秒", begTime.ToString("mm:ss.ffffzzz"), DateTime.Now.ToString("mm:ss.ffffzzz"), Method, a), string.Format("url:{0}\r\ndata:{1}", Url, PostData));

            }
            return reStr;
        }
        catch (Exception ex)
        {
            if (!string.IsNullOrEmpty(guid))
            {
                SaveErrLogHelper.ErrorMsgLog[guid] = ex.Message;
            }
            TryCount++;
            if (TryCount < 300 && select == SelectType.Select)
            {
                Thread.CurrentThread.Join(500);
                goto reTry;
            }
            else
            {
                SaveErrLogHelper.SaveErrorLog(string.Format("Url={0},PostData={1},Method={2},select={3}", Url, PostData, Method, select), ex.ToString());
                return string.Empty;
            }
        }

    }
    private Stream Gzip(HttpWebResponse HWResp)
    {
        Stream stream1 = null;
        if (HWResp.ContentEncoding == "gzip")
        {
            stream1 = new GZipInputStream(HWResp.GetResponseStream());
        }
        else
        {
            if (HWResp.ContentEncoding == "deflate")
            {
                stream1 = new InflaterInputStream(HWResp.GetResponseStream());
            }
        }
        if (stream1 == null)
        {
            return HWResp.GetResponseStream();
        }

        return stream1;
    }

    public enum SelectType
    {
        Select = 0,
        Update = 1,
        Insert = 2,
        Delete = 3
    }

    /// <summary>
    /// 處理網絡連接
    /// </summary>
    /// <param name="Url">Url連接</param>
    /// <param name="PostData">參數</param>
    /// <param name="Method">訪問類型(GET/POST)</param>
    /// <param name="select">數據訪問類型(select/update/insert/delete)</param>
    /// <returns></returns>
    public MemoryStream QueryDataStream(string Url, string PostData, string Method, SelectType select = SelectType.Select, string guid = null)
    {
        var begTime = DateTime.Now;
        //int TryCount = 0;
        try
        {
            HttpWebRequest httpRequest;

            if (Method.ToLower() == "post")
            {
                httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
            }
            else
            {
                if (string.IsNullOrEmpty(PostData))
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
                }
                else
                {
                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(Url + "?" + PostData.Trim());
                }
            }
            httpRequest.Method = Method.ToUpper();
            if (Method.ToLower() == "post")
            {
                httpRequest.ContentLength = PostData.Length;
            }
            httpRequest.ContentType = "application/x-www-form-urlencoded";
            httpRequest.Accept = "*/*";
            httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            httpRequest.UserAgent = userAgent;
            if (!Url.Contains("FeesBiling"))
            {
                httpRequest.AutomaticDecompression = DecompressionMethods.GZip;
            }
            HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();
            Stream stream = response.GetResponseStream();
            if (stream != null)
            {
                byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 0, bytes.Length);
                stream.Seek(0, SeekOrigin.Begin);
                stream.Dispose();
                response.Close();
                return new MemoryStream(bytes);
            }
        }
        catch (Exception)
        {
            return null;
        }
        return null;
    }

    internal T ReadStreamListFromBase64String<T>(string path)
    {
        using (StreamReader sr = new StreamReader(path, Encoding.UTF8))
        {
            return JsonConvert.DeserializeObject<T>(Encoding.Default.GetString(Convert.FromBase64String(sr.ReadToEnd())));
        }
    }

    internal void WriteStreamToBase64String(string path, object data)
    {
        using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
        {
            sw.Write(Convert.ToBase64String(Encoding.Default.GetBytes(JsonConvert.SerializeObject(data))));
            sw.Flush();
        }
    }

    public T Post<T>(string url, object param) where T : class
    {
        var begTime = DateTime.Now;
        var json = JsonConvert.SerializeObject(param);
        var byteData = Encoding.UTF8.GetBytes(json);
        var httpRequest = (HttpWebRequest)WebRequest.Create(url);
        httpRequest.Method = "post";
        httpRequest.KeepAlive = false;
        httpRequest.ContentType = "application/json;charset=utf-8";
        httpRequest.ContentLength = byteData.Length;
        httpRequest.GetRequestStream().Write(byteData, 0, byteData.Length);
        //httpRequest.Timeout = 2 * 60 * 1000;
        var strResponse = string.Empty;
        TryMultiTime(() =>
        {
            var responseStream = httpRequest.GetResponse().GetResponseStream();
            if (responseStream == null) return;
            using (var reader = new StreamReader(responseStream, Encoding.UTF8))
            {
                strResponse = reader.ReadToEnd();
            }
        }, 150);
          //日志
            TimeSpan a = DateTime.Now - begTime;
            if (a.Milliseconds > 500)
            {
                SaveErrLogHelper.SaveErrorLog(
string.Format("運行時間:{0}-{1}.請求方式:{2},共耗時{3}毫秒", begTime.ToString("mm:ss.ffffzzz"), DateTime.Now.ToString("mm:ss.ffffzzz"), "Post", a), string.Format("url:{0}\r\ndata:{1}", url, json));

            }
        Debug.Write(strResponse);
        return JsonConvert.DeserializeObject<T>(strResponse);
    }

    private void TryMultiTime(Action act, int tryTimes, int interval = 2000)
    {
        var i = 0;
        while (true)
        {
            try
            {
                i++;
                act();
                break;
            }
            catch (Exception ex)
            {
                if (i >= tryTimes)
                {
                    SaveErrLogHelper.SaveErrorLog(string.Empty, ex.ToString());
                    throw new Exception("請求超時", ex);
                }
                Thread.Sleep(interval);
            }
        }
    }
}

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容