## HttpWebrequest 几种用法以及微信公众号使用的案例

必须引用 System.Net  这个只要 framework4.o 之前都有,这就是HttpWebRequest 比httpClient 用广的原因,下面就列举几种用法和微信公众号使用案例

Post  

       方式比较简单,传入的值value 是已经序列化好json 对象

 public string PostValue(string Url, string value)
        {
            try
            {
                Encoding myEncoding = Encoding.Default;
                byte[] postBytes = Encoding.UTF8.GetBytes(value);
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url);
                req.Method = "POST";
                req.ContentType = "application/json";
                req.ContentLength = postBytes.Length;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(postBytes, 0, postBytes.Length);
                }
                using (WebResponse wr = req.GetResponse())
                {
                    System.IO.Stream respStream = wr.GetResponseStream();
                    using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.Default))
                    {
                        return reader.ReadToEnd();
                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 Get  

      方式也是比较简单,需要注意的是,webrequest 不支持写入参数值只能拼写到Url后 

 public string GetValues(string Url, int pageSize, int pageIndex)
        {
            try
            {
                Encoding myEncoding = Encoding.Default;

                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url + "?pageSize=" + pageSize + "&pageIndex=" + pageIndex);
                req.Method = "Get";
                req.ContentType = "text/plain";

                using (WebResponse wr = req.GetResponse())
                {
                    System.IO.Stream respStream = wr.GetResponseStream();
                    using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.Default))
                    {
                        return reader.ReadToEnd();
                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

微信公众号上传媒资,这段代码我是从java翻过来的,没有问题可以贴过去直接用,HttpPostFileBase 这个 .net Mvc 封装获取文件的一个工具类,这里如果改一下,传文件流和文件名称就行

 
 

    

         /// <summary>
        /// 发起httpPost 请求,可以上传文件
        /// </summary>
        /// <param name="url">请求的地址</param>
        /// <param name="files">文件</param>
        /// <param name="input">表单数据</param>
        /// <param name="endoding">编码</param>
        /// <returns></returns>
        public static string PostResponse(string url, HttpPostedFileBase file, Dictionary<string, string> input, Encoding endoding, byte[] data1)
        {
         return   PostResponse(url, file, input, endoding, data1, "media");
        }

        /// <summary>
        /// 发起httpPost 请求,可以上传文件
        /// </summary>
        /// <param name="url">请求的地址</param>
        /// <param name="files">文件</param>
        /// <param name="input">表单数据</param>
        /// <param name="endoding">编码</param>
        /// <returns></returns>
        public static string PostResponse(string url, HttpPostedFileBase file, Dictionary<string, string> input, Encoding endoding, byte[] data1,string name)
        {
            string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Method = "POST";
            request.KeepAlive = true;
            //request.Credentials = CredentialCache.DefaultCredentials;
            request.Expect = "";

            MemoryStream stream = new MemoryStream();


            byte[] line = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
            byte[] enterER = Encoding.ASCII.GetBytes("\r\n");
            ////提交文件
            if (file != null)
            {
                string fformat = "Content-Disposition:form-data; name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";



                stream.Write(line, 0, line.Length);        //项目分隔符
                string s = string.Format(fformat, name, file.FileName, file.ContentType);
                byte[] data = Encoding.UTF8.GetBytes(s);
                stream.Write(data, 0, data.Length);

                stream.Write(data1, 0, data1.Length);
                stream.Write(enterER, 0, enterER.Length);  //添加\r\n    
            }
            //提交文本字段
            if (input != null)
            {
                string format = "--" + boundary + "\r\nContent-Disposition:form-data;name=\"{0}\"\r\n\r\n{1}\r\n";    //自带项目分隔符
                foreach (string key in input.Keys)
                {
                    string s = string.Format(format, key, input[key]);
                    byte[] data = Encoding.UTF8.GetBytes(s);
                    stream.Write(data, 0, data.Length);
                }

            }
            byte[] foot_data = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n");      //项目最后的分隔符字符串需要带上--  
            stream.Write(foot_data, 0, foot_data.Length);

            request.ContentLength = stream.Length;
            Stream requestStream = request.GetRequestStream(); //写入请求数据
            stream.Position = 0L;
            stream.CopyTo(requestStream); //
            stream.Close();
            requestStream.Close();
            try
            {
                HttpWebResponse response;
                response = (HttpWebResponse)request.GetResponse();
                using (var responseStream = response.GetResponseStream())
                using (var mstream = new MemoryStream())
                {
                    responseStream.CopyTo(mstream);
                    string message = endoding.GetString(mstream.ToArray());
                    return message;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

 

转载于:https://www.cnblogs.com/everymanHeart/p/7217662.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值