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
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值