天天看點

HttpWebRequest請求Web資料抓包整合

/// <summary>

    /// 遠端通路相關

    /// 版本号:17.08.25.10

    /// 作者:王鑫

    /// 日期:2017.08.25.10

    /// 版本日志:遠端通路公共方法詳細化

    /// </summary>

    public class ComWebRequest

    {

        #region 公共處理

        /// <summary>

        /// 設定HttpWebRequest請求

        /// </summary>

        /// <param name="request">HttpWebRequest</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <returns>成功:HttpWebRequest實體;失敗:null</returns>

        public static void SetRequest(HttpWebRequest request, Dictionary<string, string> dicHeaders)

        {

            if (dicHeaders != null && dicHeaders.Count > 0)

            {

                foreach (var item in dicHeaders)

                {

                    switch (item.Key.ToLower().Replace("-", ""))

                    {

                        case "host":

                            request.Host = item.Value;

                            break;

                        case "keepalive":

                            request.KeepAlive = Convert.ToBoolean(item.Value.ToLower());

                            break;

                        case "accept":

                            request.Accept = item.Value;

                            break;

                        case "useragent":

                            request.UserAgent = item.Value;

                            break;

                        case "referer":

                            request.Referer = item.Value;

                            break;

                        case "automaticdecompression":

                            request.AutomaticDecompression = item.Value.ToLower() == "gzip" ? DecompressionMethods.GZip : DecompressionMethods.Deflate;//自動解壓

                            break;

                        case "allowautoredirect":

                            request.AllowAutoRedirect = Convert.ToBoolean(item.Value.ToLower());//重定向

                            break;

                        case "protocolversion":

                            request.ProtocolVersion = item.Value == "10" ? HttpVersion.Version10 : HttpVersion.Version11;//HTTP版本号

                            break;

                        case "webproxy":

                            if (!string.IsNullOrEmpty(item.Value))

                            {

                                string[] strProxys = item.Value.Split('\n');

                                WebProxy proxy = new WebProxy(strProxys[0]);

                                if (strProxys.Length == 3)

                                    proxy.Credentials = new NetworkCredential(strProxys[1], strProxys[2]);

                                request.Proxy = proxy;

                            }

                            break;

                        case "contenttype":

                            request.ContentType = item.Value;

                            break;

                        default:

                            request.Headers.Add(item.Key, item.Value);

                            break;

                    }

                }

            }

        }

        /// <summary>

        /// 設定POST請求對象

        /// </summary>

        /// <param name="parm">請求參數</param>

        /// <param name="dicHeaders">請求集合</param>

        /// <param name="reqencoding">編碼格式</param>

        /// <returns>請求對象</returns>

        public static HttpWebResponse GetResponse(string url, string parm, int time, string requestencode, string strCookie, Dictionary<string, string> dicHeaders, string path, string Method)

        {

            System.Net.ServicePointManager.DefaultConnectionLimit = 512;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.ServicePoint.Expect100Continue = false;

            Encoding reqencoding = string.IsNullOrEmpty(requestencode) ? Encoding.UTF8 : Encoding.GetEncoding(requestencode);

            if (time > 0)

                request.Timeout = time;

            if (!string.IsNullOrEmpty(strCookie))

                request.Headers.Add(strCookie);

            if (dicHeaders != null && dicHeaders.ContainsKey("ProxyIP") && dicHeaders.ContainsKey("ProxyAct") && dicHeaders.ContainsKey("ProxyPwd"))

            {

                WebProxy proxy = new WebProxy(dicHeaders["ProxyIP"]);

                proxy.Credentials = new NetworkCredential(dicHeaders["ProxyAct"], dicHeaders["ProxyPwd"]);

                request.Proxy = proxy;

                dicHeaders.Remove("ProxyIP");

                dicHeaders.Remove("ProxyAct");

                dicHeaders.Remove("ProxyPwd");

            }

            SetRequest(request, dicHeaders);

            if (!string.IsNullOrEmpty(path))

            {

                //設定證書

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

                ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;

                string strPath = HttpContext.Current.Server.MapPath(path);

                request.ClientCertificates.Add(new X509Certificate(strPath));

            }

            switch (Method)

            {

                case "GET":

                    request.Method = "GET";

                    break;

                case "POST":

                    request.Method = "POST";

                    if (dicHeaders != null && (dicHeaders.ContainsKey("ContentType") || dicHeaders.ContainsKey("Content-Type")))

                    {

                    }

                    else

                        request.ContentType = "application/x-www-form-urlencoded";

                    if (!string.IsNullOrEmpty(parm))

                    {

                        byte[] b = reqencoding.GetBytes(parm);

                        request.ContentLength = b.Length;

                        Stream outStream = request.GetRequestStream();

                        outStream.Write(b, 0, b.Length);

                        outStream.Close();

                    }

                    break;

            }

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            return response;

        }

        /// <summary>

        /// 擷取傳回結果

        /// </summary>

        /// <param name="ReturnValue">傳回結果</param>

        /// <param name="repencoding">編碼格式</param>

        /// <param name="response">HttpWebResponse</param>

        /// <returns>擷取傳回結果</returns>

        public static string GetReturnValue(string responseencode, HttpWebResponse response)

        {

            string ReturnValue = string.Empty;

            try

            {

                Encoding repencoding = string.IsNullOrEmpty(responseencode) ? Encoding.UTF8 : Encoding.GetEncoding(responseencode);

                Stream resStream = response.GetResponseStream();

                StreamReader SR = new StreamReader(resStream, repencoding);

                ReturnValue = SR.ReadToEnd();

                resStream.Close();

            }

            catch (WebException ex)

            {

                ReturnValue = "Error:" + ex.Message;

            }

            return ReturnValue;

        }

        /// <summary>

        /// 擷取傳回結果圖檔位元組組

        /// </summary>

        /// <param name="responseencode">編碼格式</param>

        /// <param name="response">HttpWebResponse</param>

        /// <returns>擷取傳回結果圖檔位元組組</returns>

        public static byte[] GetReturnBtyes(string responseencode, HttpWebResponse response)

        {

            byte[] bytes = null;

            try

            {

                Encoding repencoding = string.IsNullOrEmpty(responseencode) ? Encoding.UTF8 : Encoding.GetEncoding(responseencode);

                using (Stream resStream = response.GetResponseStream())

                {

                    Bitmap sourcebm = new Bitmap(resStream);

                    MemoryStream ms = new MemoryStream();

                    sourcebm.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

                    bytes = ms.GetBuffer();

                }

            }

            catch (WebException)

            {

                bytes = null;

            }

            return bytes;

        }

        #endregion

        #region GET遠端通路

        #region 傳回字元串

        #region 重載方法

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestGetData(string url)

        {

            return RequestGetData(url, 0, "", "", null);

        }

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestGetData(string url, int time)

        {

            return RequestGetData(url, time, "", "", null);

        }

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="responseencode">輸出編碼格式(空預設Encoding.UTF8))</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestGetData(string url, int time, string responseencode)

        {

            return RequestGetData(url, time, responseencode, "", null);

        }

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestGetData(string url, int time, string responseencode, string strCookie)

        {

            return RequestGetData(url, time, responseencode, strCookie, null);

        }

        #endregion

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestGetData(string url, int time, string responseencode, string strCookie, Dictionary<string, string> dicHeaders)

        {

            string ReturnValue = "";

            try

            {

                HttpWebResponse response = GetResponse(url, "", time, "", strCookie, dicHeaders, "", "GET");

                ReturnValue = GetReturnValue(responseencode, response);

                response.Close();

            }

            catch (WebException ex)

            {

                ReturnValue = "Error:" + ex.Message;

            }

            return ReturnValue;

        }

        #endregion

        #region 傳回HttpWebResponse

        #region 重載方法

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponseGetData(string url, ref string error)

        {

            return ResponseGetData(url, 0, "", null, ref error);

        }

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponseGetData(string url, int time, ref string error)

        {

            return ResponseGetData(url, time, "", null, ref error);

        }

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponseGetData(string url, int time, string strCookie, ref string error)

        {

            return ResponseGetData(url, time, strCookie, null, ref error);

        }

        #endregion

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponseGetData(string url, int time, string strCookie, Dictionary<string, string> dicHeaders, ref string error)

        {

            HttpWebResponse response = null;

            try

            {

                response = GetResponse(url, "", time, "", strCookie, dicHeaders, "", "GET");

            }

            catch (WebException ex)

            {

                error = "Error:" + ex.Message;

            }

            return response;

        }

        #endregion

        #endregion

        #region POST遠端通路

        #region 傳回字元串

        #region 重載方法

        /// <summary>

        /// 通過GET方式讀取遠端文檔

        /// 預設:傳回UTF-8格式;沒有逾時時間

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostData(string url, string parm)

        {

            return RequestPostData(url, parm, 0, "", "", "", null);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostData(string url, string parm, int time)

        {

            return RequestPostData(url, parm, time, "", "", "", null);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間))</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(空預設Encoding.UTF8))</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode)

        {

            return RequestPostData(url, parm, time, requestencode, responseencode, "", null);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode, string strCookie)

        {

            return RequestPostData(url, parm, time, requestencode, responseencode, strCookie, null);

        }

        #endregion

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, Dictionary<string, string> dicHeaders)

        {

            string ReturnValue = "";

            try

            {

                HttpWebResponse response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, "", "POST");

                ReturnValue = GetReturnValue(responseencode, response);

                response.Close();

            }

            catch (Exception ex)

            {

                ReturnValue = "Error:" + ex.Message;

            }

            return ReturnValue;

        }

        #endregion

        #region 傳回HttpWebResponse

        #region 重載方法

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponsePostData(string url, string parm, ref string error)

        {

            return ResponsePostData(url, parm, 0, "", "", null, ref error);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// 預設:傳回UTF-8格式

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponsePostData(string url, string parm, int time, ref string error)

        {

            return ResponsePostData(url, parm, time, "", "", null, ref error);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, ref string error)

        {

            return ResponsePostData(url, parm, time, requestencode, "", null, ref error);

        }

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, string strCookie, ref string error)

        {

            return ResponsePostData(url, parm, time, requestencode, strCookie, null, ref error);

        }

        #endregion

        /// <summary>

        /// 通過POST方式讀取遠端文檔

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間(0表示無逾時時間)</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>HttpWebResponse</returns>

        public static HttpWebResponse ResponsePostData(string url, string parm, int time, string requestencode, string strCookie, Dictionary<string, string> dicHeaders, ref string Error)

        {

            HttpWebResponse response = null;

            try

            {

                response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, "", "POST");

            }

            catch (Exception ex)

            {

                Error = "Error:" + ex.Message;

            }

            return response;

        }

        #endregion

        #endregion

        #region 帶證書遠端通路

        /// <summary>

        /// 帶證書遠端通路

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">POST送出的參數</param>

        /// <param name="time">通路逾時時間</param>

        /// <param name="path">證書位址(格式:"~/ConfigFile/Share.cer")</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string RequestPostCertificateData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, string path, Dictionary<string, string> dicHeaders)

        {

            string ReturnValue = "";

            try

            {

                HttpWebResponse response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, path, "POST");

                ReturnValue = GetReturnValue(responseencode, response);

                response.Close();

            }

            catch (WebException ex)

            {

                ReturnValue = "Error:" + ex.Message;

            }

            return ReturnValue;

        }

        /// <summary>

        /// 帶證書遠端通路

        /// </summary>

        /// <param name="url">遠端位址字元串</param>

        /// <param name="parm">為空:GET  不為空:POST送出的參數</param>

        /// <param name="time">通路逾時時間</param>

        /// <param name="path">證書位址(格式:"~/ConfigFile/Share.cer")</param>

        /// <param name="requestencode">輸入編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="responseencode">輸出編碼格式(為空為Encoding.UTF8))</param>

        /// <param name="strCookie">Cookie(例:Cookie:JSESSIONID=6B64245171E9C94F6573DFE54143FFF0.LCCServer2;)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <param name="Error">錯誤資訊</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static HttpWebResponse RequestPostCertificateData(string url, string parm, int time, string requestencode, string responseencode, string strCookie, string path, Dictionary<string, string> dicHeaders, ref string Error)

        {

            HttpWebResponse response = null;

            try

            {

                response = GetResponse(url, parm, time, requestencode, strCookie, dicHeaders, path, "POST");

            }

            catch (WebException ex)

            {

                Error = "Error:" + ex.Message;

            }

            return response;

        }

        /// <summary>

        /// 驗證伺服器證書

        /// </summary>

        public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

        {

            return true;

        }

        #endregion

        #region 上傳檔案遠端通路

        /// <summary> 

        /// 将本地檔案上傳到指定的伺服器(HttpWebRequest方法) 

        /// </summary> 

        /// <param name="url">檔案上傳到的伺服器位址</param> 

        /// <param name="time">通路逾時時間</param>

        /// <param name="fileNamePath">要上傳的本地檔案(全路徑)</param> 

        /// <param name="saveName">檔案上傳後的名稱</param> 

        /// <param name="bufferLength">每次上傳大小</param> 

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        private string UploadFile(string url, int time, string fileNamePath, string saveName, int bufferLength)

        {

            string ReturnValue = "";

            FileStream fs = null;

            BinaryReader r = null;

            try

            {

                fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);

                r = new BinaryReader(fs);//時間戳 

                string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");

                byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //請求頭部資訊 

                StringBuilder sb = new StringBuilder();

                sb.Append("--");

                sb.Append(strBoundary);

                sb.Append("\r\n");

                sb.Append("Content-Disposition: form-data; name=\"");

                sb.Append("file");

                sb.Append("\"; filename=\"");

                sb.Append(saveName);

                sb.Append("\";");

                sb.Append("\r\n");

                sb.Append("Content-Type: ");

                sb.Append("application/octet-stream");

                sb.Append("\r\n");

                sb.Append("\r\n");

                string strPostHeader = sb.ToString();

                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);// 根據uri建立HttpWebRequest對象 

                HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);

                httpReq.Method = "POST";//對發送的資料不使用緩存 

                httpReq.AllowWriteStreamBuffering = false;

                httpReq.Timeout = time;//設定獲得響應的逾時時間

                httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;

                long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;

                long fileLength = fs.Length;

                httpReq.ContentLength = length;

                byte[] buffer = new byte[bufferLength]; //已上傳的位元組數 

                long offset = 0;//開始上傳時間 

                DateTime startTime = DateTime.Now;

                int size = r.Read(buffer, 0, bufferLength);

                Stream postStream = httpReq.GetRequestStream();//發送請求頭部消息 

                postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

                while (size > 0)

                {

                    postStream.Write(buffer, 0, size);

                    offset += size;

                    TimeSpan span = DateTime.Now - startTime;

                    double second = span.TotalSeconds;

                    size = r.Read(buffer, 0, bufferLength);

                }

                //添加尾部的時間戳 

                postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

                postStream.Close();

                WebResponse webRespon = httpReq.GetResponse();

                Stream s = webRespon.GetResponseStream();

                StreamReader sr = new StreamReader(s);

                String sReturnString = sr.ReadLine();

                s.Close();

                sr.Close();

            }

            catch (WebException ex)

            {

                ReturnValue = "Error:" + ex.Message;

            }

            finally

            {

                fs.Close();

                r.Close();

            } return ReturnValue;

        }

        /// <summary>

        /// 帶參數上傳檔案遠端通路

        /// </summary>

        /// <param name="url">位址</param>

        /// <param name="file">檔案</param>

        /// <param name="paramName">檔案名</param>

        /// <param name="suffix">字尾名(jpg)</param>

        /// <param name="contentType">檔案類型(images/jpeg)</param>

        /// <param name="dicHeaders">參數鍵值對</param>

        /// <returns>成功:網站傳回的結果;失敗:Error開頭的錯誤資訊</returns>

        public static string UploadParamFile(string url, byte[] buffer, string paramName, string suffix, string contentType, Dictionary<string, string> dicHeaders)

        {

            string result = string.Empty;

            WebResponse wresp = null;

            HttpWebRequest wr = null;

            try

            {

                string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");

                byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

                wr = (HttpWebRequest)WebRequest.Create(url);

                wr.ContentType = "multipart/form-data; boundary=" + boundary;

                wr.Method = "POST";

                wr.KeepAlive = true;

                wr.Credentials = System.Net.CredentialCache.DefaultCredentials;

                Stream rs = wr.GetRequestStream();

                string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";

                foreach (var item in dicHeaders)

                {

                    rs.Write(boundarybytes, 0, boundarybytes.Length);

                    string formitem = string.Format(formdataTemplate, item.Key, item.Value);

                    byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);

                    rs.Write(formitembytes, 0, formitembytes.Length);

                }

                rs.Write(boundarybytes, 0, boundarybytes.Length);

                string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";

                string header = string.Format(headerTemplate, paramName, "flie." + suffix, contentType);

                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);

                rs.Write(headerbytes, 0, headerbytes.Length);

                rs.Write(buffer, 0, buffer.Length);

                byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");

                rs.Write(trailer, 0, trailer.Length);

                rs.Close();

                wresp = wr.GetResponse();

                Stream stream2 = wresp.GetResponseStream();

                StreamReader reader2 = new StreamReader(stream2);

                result = reader2.ReadToEnd();

            }

            catch (Exception)

            {

                if (wresp != null)

                {

                    wresp.Close();

                    wresp = null;

                }

            }

            finally

            {

                wr = null;

            }

            return result;

        }

        #endregion

        #region 處理Cookie

        /// <summary>

        /// 擷取傳回Cookie

        /// </summary>

        /// <param name="ReturnValue">傳回結果</param>

        /// <param name="repencoding">編碼格式</param>

        /// <param name="response">HttpWebResponse</param>

        /// <returns>擷取傳回Cookie</returns>

        public static string GetResponseCookie(HttpWebResponse response)

        {

            string strCodeCookie = string.Empty;

            try

            {

                strCodeCookie = response.Headers.Get("set-cookie");

                strCodeCookie = GetCookie(strCodeCookie, true);

            }

            catch (WebException)

            {

                strCodeCookie = "";

            }

            return strCodeCookie;

        }

        /// <summary>

        /// 處理Cookie

        /// </summary>

        /// <param name="CookieStr">請求傳回的Cookie</param>

        /// <param name="CookieStr">結果前面是否帶Cookie</param>

        /// <returns>成功:處理後的Cookie</returns>

        public static string GetCookie(string CookieStr, bool isCookie)

        {

            string strRet = string.Empty;

            try

            {

                string[] myArray = CookieStr.Split(',');

                if (myArray.Length > 0)

                {

                    strRet = isCookie ? "Cookie: " : "";

                    foreach (var str in myArray)

                    {

                        string[] CookieArray = str.Split(';');

                        strRet += CookieArray[0].Trim();

                        strRet += "; ";

                    }

                    strRet = strRet.Substring(0, strRet.Length - 2);

                }

            }

            catch (Exception)

            {

                strRet = "";

            }

            return strRet;

        }

        #endregion

        #region 删除不可見字元

        /// <summary>

        /// 删除不可見字元

        /// </summary>

        /// <param name="str">原始字元</param>

        /// <returns>删除後結果</returns>

        public static string DeleteUnVisibleChar(string str)

        {

            string strRet = str;

            try

            {

                if (string.IsNullOrEmpty(str))

                    strRet = "";

                else

                {

                    System.Text.StringBuilder sBuilder = new System.Text.StringBuilder();

                    for (int i = 0; i < str.Length; i++)

                    {

                        int Unicode = str[i];

                        if (Unicode < 32)

                        {

                            if (Unicode == 2 || Unicode == 3 || Unicode == 27 || Unicode == 30 || Unicode == 11 || Unicode == 15 || Unicode == 16)

                            {

                                continue;

                            }

                            else if (Unicode == 8 || Unicode == 9 || Unicode == 10 || Unicode == 13)

                            {

                                sBuilder.Append(str[i].ToString());

                            }

                            else

                            {

                                continue;

                            }

                        }

                        else

                            sBuilder.Append(str[i].ToString());

                    }

                    strRet = sBuilder.ToString();

                }

            }

            catch (Exception ex)

            {

                strRet = "Error:" + ex.Message;

            }

            return strRet;

        }

        #endregion

    }