• C#调用接口注意要点


    在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用,

    所以首先需要通过调用登录接口来保存cookie值,再进行其他接口的调用

    1.通过Get方式

            #region get方式
    
            public string HttpGet(string url)
            {
    
                Encoding encoding = Encoding.UTF8;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.ContentType = "application/json";
                request.Headers["Accept-Encoding"] = "gzip,deflase";
                request.AutomaticDecompression = DecompressionMethods.GZip;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                // HttpCookie cookies = new HttpCookie("admin");  //如果有需要通过登录实现保存cookie值的话可以加一部分
                // cookies.Value = Convert.ToString(response.Headers["Set-Cookie"]); // 通过响应请求读取带cookie的http数据
                // cookies.Expires = DateTime.Now.AddDays(1);
                //  HttpContext.Current.Response.Cookies.Add(cookies);
    
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    return reader.ReadToEnd();
                }
            }
            #endregion

    但是并不是所有的get请求都需要添加这个heard的内容,有些加了这个可能出现乱码的情况,所以不要设置Accept-Encoding的Header

    此处之所以加此header,是因为看到网页分析工具中所得到的浏览器浏览该网页,对应的http的header的内容中,就是这样设置的。

    所以,代码中,也是模拟浏览器去访问网页,就设置了对应的Accept-Encoding为gzip,deflate了

    普通浏览器访问网页,之所以添加:"Accept-Encoding" = "gzip,deflate"

    那是因为,浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。

    同时添加了 request.AutomaticDecompression = DecompressionMethods.GZip;这一句,便可以获得正确的数据。

    如果你获取网页内容太大的话,那么还是可以用这个办法的,这样就可以让HttpWebRequest自动帮你实现对应的解压缩了,可以减少数据数据传输量,节省时间,提高效率。

    2.通过post方式

    public string HttpPost2(string url, string body)
    {
    
       //把用户传过来的数据转成“UTF-8”的字节流
        Encoding encoding = Encoding.UTF8;
        //先根据用户请求的uri构造请求地址
        //创建Web访问对象
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
        request.Method = "POST";
        // request.Accept = "application/json";
       request.ContentType = "application/json; charset=UTF-8";
       request.Headers["Accept-Encoding"] = "gzip, deflate";
       request.AutomaticDecompression = DecompressionMethods.GZip;
       //HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies["admin"];  //若是需要登录过后再能访问获取url的数据,需要在请求头中设置cookie值
       //if (Cookie != null)
       //    request.Headers.Add("Cookie", Cookie.Value.ToString());
    
       byte[] buffer = encoding.GetBytes(body);
       request.ContentLength = buffer.Length;
       request.GetRequestStream().Write(buffer, 0, buffer.Length);
       //通过Web访问对象获取响应内容
       HttpWebResponse response = (HttpWebResponse) request.GetResponse();
       //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
       using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
       {
        return reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
       }
     }

    3.通过put请求

            #region Put请求
            public string Put(string data, string uri)
            {//创建Web访问对象
                HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
                //把用户传过来的数据转成“UTF-8”的字节流
                byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
    
                Request.Method = "PUT";
                Request.ContentLength = buf.Length;
                Request.ContentType = "application/json";
                Request.MaximumAutomaticRedirections = 1;
                Request.AllowAutoRedirect = true;
                //发送请求
                Stream stream = Request.GetRequestStream();
                stream.Write(buf, 0, buf.Length);
                stream.Close();
    
                //获取接口返回值
                //通过Web访问对象获取响应内容
                HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
                //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
                StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);
                //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
                string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
                reader.Close();
                Response.Close();
                return returnXml;
    
            }           
            #endregion

    4.通过Delete请求

            #region Delete请求
            public string Delete(string data, string uri)
            {
                //创建Web访问对象
                HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
                //把用户传过来的数据转成“UTF-8”的字节流
                byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
    
                Request.Method = "DELETE";
                Request.ContentLength = buf.Length;
                Request.ContentType = "application/json";
                Request.MaximumAutomaticRedirections = 1;
                Request.AllowAutoRedirect = true;
                //发送请求
                Stream stream = Request.GetRequestStream();
                stream.Write(buf, 0, buf.Length);
                stream.Close();
    
                //获取接口返回值
                //通过Web访问对象获取响应内容
                HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
                //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
                StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);
                //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
                string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
                reader.Close();
                Response.Close();
                return returnXml;
    
            }
           #endregion

    不同的场景需求,使用不同的方式,应用在不同的场景 。

    通过这几种组合方式 ,可以调用http接口,完成调用和测试。

  • 相关阅读:
    关于使用modelsim的一点感想
    matlab与modelsim中的文件操作函数
    几种测距定位方法
    关于数字信号处理中的一些概念的理解
    转载 关于case语句的优先级
    转载 关键路径优化实例
    转载 寄存器平衡实例
    第八篇:并发回射服务器的最基本实现思路
    第七篇:几个经典的TCP通信函数
    第六章:表达格式和数值格式的转换
  • 原文地址:https://www.cnblogs.com/i3yuan/p/10703500.html
Copyright © 2020-2023  润新知