程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> HttpRequest重寫,解決資源戰勝/鏈接超時/分塊下載事件通知 問題。,httprequest重寫

HttpRequest重寫,解決資源戰勝/鏈接超時/分塊下載事件通知 問題。,httprequest重寫

編輯:C#入門知識

HttpRequest重寫,解決資源戰勝/鏈接超時/分塊下載事件通知 問題。,httprequest重寫


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;

namespace MyApi
{
    public class HttpRequest
    {
        public HttpRequest()
        {
            //string Url = "http://localhost:5192/api/Cab/5";
            //string httpMethod = "PUT";
            //string httpContent = "{'Name': 'B90', 'Color': 'Green', 'Height': 1590, 'Width': 4500 }";
            //Encoding httpCode = Encoding.Default;
            //Console.WriteLine(Get(Url, httpMethod, httpContent, httpCode));

            setEncoding = Encoding.Default;
        }

        public HttpRequest(string url, string method) : base()
        {
            setUrl = url;
            setMethod = method;
        }

        /// <summary>
        /// 服務請求地址 http://www.aaa.com/
        /// </summary>
        public string setUrl { get; set; }
        /// <summary>
        /// 服務請求方法:GET/POST/PUT/DELETE
        /// </summary>
        public string setMethod { get; set; }

        /// <summary>
        /// 設置服務請求數據類型
        /// </summary>
        [DefaultValue("text/html")]
        public string setContentType { get; set; }

        /// <summary>
        /// 設置服務頁面編碼
        /// </summary>
        public Encoding setEncoding { get; set; }

        public delegate void DownloadStartDelegate(int httpStatusCode);
        public delegate void DownloadProcessDelegate(long totalLength, long DownloadedByte, float percent);
        public delegate void DownloadEndDelegate(long totalLength);

        public event DownloadStartDelegate DownloadStart;
        public event DownloadProcessDelegate DownloadProcess;
        public event DownloadEndDelegate DownloadEnd;

        public string Get()
        {
            return Get(setUrl);
        }

        public string Get(string setUrl)
        {
            return Get(setUrl, "GET", null, setEncoding);
        }

        public string Get(string setUrl, string httpContent)
        {
            return Get(setUrl, "POSE", httpContent, setEncoding);
        }

        public string Get(string Url, string httpMethod, string httpContent, Encoding httpCode)
        {
            if (string.IsNullOrWhiteSpace(Url) || string.IsNullOrWhiteSpace(httpMethod))
            {
                throw new ArgumentException("Url or HttpMethod 參數不能為空!");
            }

            GC.Collect();
            StringBuilder content = new StringBuilder();
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            StreamWriter sw = null;
            try
            {
                ServicePointManager.DefaultConnectionLimit = 512;
                request = WebRequest.Create(Url) as HttpWebRequest;
                request.Method = httpMethod;
                request.AllowAutoRedirect = true;
                request.KeepAlive = false;
                request.Accept = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; Maxthon 2.0)";
                request.ContentType = setContentType; //"application/octet-stream";
                request.Proxy = null;

                if (httpContent != null && !string.IsNullOrWhiteSpace(httpContent))
                {
                    using (sw = new StreamWriter(request.GetRequestStream()))
                    {
                        sw.Write(httpContent);
                    }
                }

                using (response = request.GetResponse() as HttpWebResponse)
                {
                    if (this.DownloadStart != null)
                        this.DownloadStart((int)response.StatusCode);

                    Stream stream = response.GetResponseStream();
                    if (response.ContentEncoding.ToLower().Contains("gzip"))
                        stream = new GZipStream(stream, CompressionMode.Decompress);

                    float percent = 0;
                    long totalDownloadedByte = 0;
                    long totalBytes = response.ContentLength;
                    while (stream.CanRead)
                    {
                        byte[] buffer = new byte[1024];
                        int canrds = stream.Read(buffer, 0, 1024);
                        totalDownloadedByte = canrds + totalDownloadedByte;
                        percent = (float)totalDownloadedByte / (float)totalBytes * 100;

                        if (DownloadProcess != null)
                            DownloadProcess(totalBytes, totalDownloadedByte, percent);

                        if (canrds == 0) 
                            break;

                        content.Append(httpCode.GetString(buffer));
                    }
                    if (DownloadEnd != null)
                        DownloadEnd(totalBytes);
                    stream.Dispose();
                }
            }
            finally
            {
                if(request != null) request.Abort();
                if(response != null) response.Dispose();
                if(sw != null) sw.Dispose();
            }
            GC.SuppressFinalize(this);
            return content.ToString();

            /*
            Response.Write(Guid.NewGuid().ToString() + "<hr />");
            Response.Write(Guid.NewGuid().ToString("N") + "<hr />");

            Response.Write(GetHttpContent);
            Response.End();
            */
        }

    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved