zoukankan      html  css  js  c++  java
  • HttpWebRequest 请求 Api 及 异常处理

                HttpWebRequest request = WebRequest.CreateHttp(url);
    
                request.Method = "post";
                request.Headers.Add(HttpRequestHeader.Authorization, "password mima");
                request.Headers.Add("Cookie", "Cookie信息");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
    
    
                //request.ContentType = "application/json";
                //string data = JsonConvert.SerializeObject(new
                //{
                //    Id = 1,
                //    Name = "中+文",//JSON格式传递参数,"+"号依然是"+"
                //    Age = 100
                //});
    
                request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
    
                // application/x-www-form-urlencoded 请求方式
                // form 表示参数格式是 form 表单的格式
                // urlencoded 表示该参数经过了 url 编码,注意:是经过了,而不是需要进行
                string data = "id=1&name=中+文&age=100";
                var bytes = Encoding.UTF8.GetBytes(data);
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();
                var response = request.GetResponse();
                var sm = response.GetResponseStream();
                var str = string.Empty;
                using (StreamReader reader = new StreamReader(sm, Encoding.UTF8))
                {
                    str = reader.ReadToEnd();
                }
                var person = JsonConvert.DeserializeObject<dynamic>(str);
                Console.WriteLine(person.Id);//1
    
                //服务器接收到请求后,识别出是"application/x-www-form-urlencoded"格式,
                //便认为参数中的"中+文"是经过了 url 编码,
                //因此,会自动 urldecode 解码
                //所以 "+" 变成了 " ".
                Console.WriteLine(person.Name);//中 文
                Console.WriteLine(person.Age);//100

    补充:

    如果API 返回的是 400,比如: return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "没有文件耶,哥们!");

    那么  var response = request.GetResponse(); 这句话直接会抛出异常

    那么,我们如何能接收到返回的信息 : "没有文件耶,哥们!" 这句话呢?

    答案是 try catch,代码如下:

                var result = string.Empty;
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        result = sr.ReadToEnd();
                    }
                }
                catch (WebException ex)
                {
                    var errorSr =new StreamReader(ex.Response.GetResponseStream());
                    result = errorSr.ReadToEnd();
                }
                return result;

  • 相关阅读:
    前端常见跨域解决方案
    前端必须要懂的浏览器缓存机制
    判断一个变量是数组还是对象
    javascript中Array常用方法
    Javascript数据类型
    Email接收验证码,以实现登录/注册/修改密码
    web安全之机器学习入门——3.2 决策树与随机森林
    web安全之机器学习入门——3.1 KNN/k近邻
    web安全之机器学习入门——2.机器学习概述
    cmd下的一些小技巧
  • 原文地址:https://www.cnblogs.com/refuge/p/8520192.html
Copyright © 2011-2022 走看看