HttpHelper上传下载请求,表单的提交

8 篇文章 0 订阅
2 篇文章 0 订阅
  public sealed class HttpHelper
    {
        public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {   // 总是接受  
            return true;
        }

        /// <summary>
        /// 最原始的请求,包括常用的参数  字符串参数
        /// </summary>
        /// <param name="url"></param>
        /// <param name="method"></param>
        /// <param name="encoding"></param>
        /// <param name="contentType"></param>
        /// <param name="headers"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string RequestUrl(string url, string method = "", string encoding = "", string contentType = "", NameValueCollection headers = null, string data = "")
        {
            Encoding code = Encoding.UTF8;
            if (!string.IsNullOrWhiteSpace(encoding))
            {
                code = Encoding.GetEncoding(encoding);
            }
            try
            {
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);//验证服务器证书回调自动验证
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Proxy = null;
                req.KeepAlive = true;
                //req.Timeout = 10000;
                //req.ContinueTimeout
                if (!string.IsNullOrWhiteSpace(method))
                    req.Method = method;
                else
                    req.Method = "GET";
                if (!string.IsNullOrWhiteSpace(contentType))
                    req.ContentType = contentType;
                else
                    req.ContentType = "application/x-www-form-urlencoded";
                if (headers != null)
                {
                    foreach (string item in headers)
                    {
                        req.Headers.Add(item, headers[item]);
                    }
                }
                if (!string.IsNullOrWhiteSpace(data))
                {
                    byte[] buffer = code.GetBytes(data);
                    req.ContentLength = buffer.Length;
                    Stream stream = req.GetRequestStream();
                    stream.Write(buffer, 0, buffer.Length);
                    stream.Close();
                }
                WebResponse res = req.GetResponse();
                Stream sr = res.GetResponseStream();
                StreamReader reader = new StreamReader(sr, code);
                string result = reader.ReadToEnd();
                reader.Close();
                sr.Close();
                res.Dispose();
                return result;
            }
            catch (WebException ep)
            {
                SocketException se = ep.InnerException as SocketException;
                if (se != null && se.ErrorCode == 10061)
                    throw new Exception(string.Format("远程服务器{0}连不上了了...", url));
                throw;
            }
            catch (Exception)
            {
                throw;
            }
        }


        /// <summary>
        /// 最原始的请求,包括常用的参数   键值对参数
        /// </summary>
        /// <param name="url"></param>
        /// <param name="method"></param>
        /// <param name="encoding"></param>
        /// <param name="contentType"></param>
        /// <param name="headers"></param>
        /// <param name="dicData"></param>
        /// <returns></returns>
        public static string RequestUrlWithKeyValue(string url, string method = "", string encoding = "", string contentType = "", NameValueCollection headers = null, IDictionary<string, string> dicData = null)
        {
            StringBuilder sb = new StringBuilder();
            foreach (KeyValuePair<string, string> item in dicData)
            {
                sb.AppendFormat("{0}={1}", item.Key, item.Value);
            }
            return RequestUrl(url, method, encoding, contentType, headers, sb.ToString());
        }

        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="url"></param>
        /// <param name="fileFullName">指定的文件全路经,包括文件名</param>
        /// <param name="useOriginName">默认从请求中获取原生的文件名,如果没有取到就用参数中的文件名</param>
        /// <returns></returns>
        public static string GetHttpRequestFile(string url, string fileFullName, bool useOriginName = true)
        {
            try
            {
                Encoding code = Encoding.GetEncoding("utf-8");
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Proxy = null;
                req.KeepAlive = true;
                req.Method = "GET";
                WebResponse res = req.GetResponse();
                if (useOriginName)
                {
                    string dis = res.Headers["Content-Disposition"];
                    int index = dis.IndexOf("filename=");
                    if (index >= 0)
                    {
                        index += 9;
                        string name = dis.Substring(index);
                        if (!string.IsNullOrWhiteSpace(name))
                        {
                            string dir = Path.GetDirectoryName(fileFullName);
                            fileFullName = Path.Combine(dir, name);
                        }
                    }
                }
                Stream sr = res.GetResponseStream();
                FileStream fs = File.Create(fileFullName);
                byte[] buffer = new byte[1024 * 4];
                int n = 0;
                while ((n = sr.Read(buffer, 0, buffer.Length)) > 0)
                    fs.Write(buffer, 0, n);
                fs.Close();
                sr.Close();
                res.Dispose();
            }
            catch (WebException ep)
            {
                SocketException se = ep.InnerException as SocketException;
                if (se != null && se.ErrorCode == 10061)
                    throw new Exception(string.Format("远程服务器{0}连不上了了...", url));
                throw;
            }
            catch (Exception)
            {
                throw;
            }
            return fileFullName;
        }

        /// <summary>
        /// http上传带其它参数的文件
        /// 说明:enter=\r\n
        /// 上传格式  "--" + boundary + enter + "Content-Disposition: form-data; name=\"jid\"" + enter + enter + roomId + enter;
        ///         每一条都是这种格式,
        ///         每行开头一定是"--" + boundary + enter  中间加协议属性和值,再加字段属性和值,先加属性名字,然后加两个enter再加属性值,然后再加一个enter做为一行的结束
        ///         字段上传完之后,最后一定还要加上一条 "--" + boundary 代表整个上传数据的结束
        ///         如果最后一个字段上传的是文件(二进制)那还最后的时候就是加enter+"--" + boundary,保证每一行是以enter结束
        ///         二进制先上传文件名字,然后再上传文件的byte[],分两步走
        /// </summary>
        /// <param name="filePath">上传一个文件</param>
        /// <param name="roomId">一个房间号,这只是一个演示参数,实际根据需要变化</param>
        /// <param name="url"></param>
        public static string PostHttpRequestFile(string filePath, string roomId, string url = @"http://upload.wechatim.vip/upload/GroupAvatarServlet")
        {
            string fileName = Path.GetFileName(filePath);
            string boundary = "slash";//边界,分割符
            string enter = "\r\n";
            string jid = "--" + boundary + enter + "Content-Disposition: form-data; name=\"roomId\"" + enter + enter + roomId + enter;
            string file = "--" + boundary + enter
                    + "Content-Type:application/octet-stream" + enter
                    + "Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"" + enter + enter;

            byte[] buffer = File.ReadAllBytes(filePath);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "multipart/form-data;boundary=" + boundary;
            Stream req = request.GetRequestStream();//定义请求流
            byte[] jidBuffer = Encoding.UTF8.GetBytes(jid);
            byte[] fileBuffer = Encoding.UTF8.GetBytes(file);
            byte[] splitBuffer = Encoding.UTF8.GetBytes(enter + "--" + boundary);
            req.Write(jidBuffer, 0, jidBuffer.Length);
            req.Write(fileBuffer, 0, fileBuffer.Length);
            req.Write(buffer, 0, buffer.Length);
            req.Write(splitBuffer, 0, splitBuffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream sm = response.GetResponseStream();
            StreamReader reader = new StreamReader(sm, Encoding.GetEncoding("utf-8"));
            string result = reader.ReadToEnd();
            reader.Close();
            sm.Close();
            return result;
        }

        /// <summary>
        /// 全部系统默认的http请求
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetHttpRequest(string url)
        {
            return RequestUrl(url);
        }

        /// <summary>
        /// 带编码的http请求,默认是utf-8
        /// </summary>
        /// <param name="url"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static string GetHttpRequestWithEncode(string url, string encoding = "utf-8")
        {
            return RequestUrl(url, "GET", encoding);
        }

        /// <summary>
        /// 带编码的http请求,默认是utf-8
        /// </summary>
        /// <param name="url"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static string GetHttpRequestWithData(string url, string data)
        {
            return RequestUrl(url, "GET", "", "", null, data);
        }

        /// <summary>
        /// 全部系统默认的http post请求
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string PostHttpRequest(string url)
        {
            return RequestUrl(url, "POST");
        }

        /// <summary>
        /// 全部系统默认的带参数的http post请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string PostHttpRequestWithData(string url, string data)
        {
            return RequestUrl(url, "POST", "", "", null, data);
        }

        /// <summary>
        /// 全部系统默认的带参数以及编码的的http post请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="encoding"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string PostHttpRequestWithEncode(string url, string encoding, string data)
        {
            return RequestUrl(url, "POST", encoding, "", null, data);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <param name="dicData">传入的数据</param>
        /// <returns></returns>
        public static string PostUrlWithKeyValue(string url, IDictionary<string, string> dicData = null)
        {
            StringBuilder sb = new StringBuilder();
            foreach (KeyValuePair<string, string> item in dicData)
            {
                sb.AppendFormat("{0}={1}", item.Key, item.Value);
            }
            return RequestUrl(url, "POST", "", "", null, sb.ToString());
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值