• C#中WebRequest请求的一些心得


    在C#开发中经常需要进行Web远程访问,方法很多,也使用了很久,但一直没有做一个总结。

      C#中用来进行远程请求的方法有很多,如WebClient,WebRequest等,也各有特点。今天在这里主要介绍WebRequest。

            先从相对入门的不需要证书验证,不需要登录的开始。

    //GET类型的请求
            public string GetContent(string uri, Encoding coding)
            {
                //Get请求中请求参数等直接拼接在url中
                WebRequest request = WebRequest.Create(uri);
    
                //返回对Internet请求的响应
                WebResponse resp = request.GetResponse();
    
                //从网络资源中返回数据流
                Stream stream = resp.GetResponseStream();
    
                StreamReader sr = new StreamReader(stream, coding);
    
                //将数据流转换文字符串
                string result = sr.ReadToEnd();
    
                //关闭流数据
                stream.Close();
                sr.Close();
    
                return result;
            }
    //POST
            public string GetContentPost(string uri, string data, Encoding coding)
            {
                WebRequest request = WebRequest.Create(uri);
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
    
                //将字符串数据转化为字节串,这也是POST请求与GET请求区别的地方
                byte[] buffer = coding.GetBytes(data);
                
                //用于将数据写入Internet资源
                Stream stream = request.GetRequestStream();
                stream.Write(buffer, 0, buffer.Length);
                request.ContentLength = buffer.Length;
    
                WebResponse response = request.GetResponse();
    
                //从网络资源中返回数据流
                stream = response.GetResponseStream();
    
                StreamReader sr = new StreamReader(stream, coding);
    
                //将数据流转换文字符串
                string result = sr.ReadToEnd();
    
                //关闭流数据
                stream.Close();
                sr.Close();
    
                return result;
            }
    //回调验证证书问题
            public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                //直接返回true,接受指定证书进行身份验证  
                return true;
            }
    
            //Get
            public string GetContent(string uri, Encoding coding)
            {
    
                //下面一行代码一定卸载请求开始前。
                //使用回调的方法进行验证。
                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
                
                //Get请求中请求参数等直接拼接在url中
                WebRequest request = WebRequest.Create(uri);
    
                //返回对Internet请求的响应
                WebResponse resp = request.GetResponse();
    
                //从网络资源中返回数据流
                Stream stream = resp.GetResponseStream();
    
                StreamReader sr = new StreamReader(stream, coding);
    
                //将数据流转换文字符串
                string result = sr.ReadToEnd();
    
                //关闭流数据
                stream.Close();
                sr.Close();
    
                return result;
            }
    
            //POST
            public string GetContentPost(string uri, string data, Encoding coding)
            {
                //下面一行代码一定卸载请求开始前。
                //使用回调的方法进行验证。
                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
    
                WebRequest request = WebRequest.Create(uri);
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
    
                //将字符串数据转化为字节串,这也是POST请求与GET请求区别的地方
                byte[] buffer = coding.GetBytes(data);
    
                //用于将数据写入Internet资源
                Stream stream = request.GetRequestStream();
                stream.Write(buffer, 0, buffer.Length);
                request.ContentLength = buffer.Length;
    
                WebResponse response = request.GetResponse();
    
                //从网络资源中返回数据流
                stream = response.GetResponseStream();
    
                StreamReader sr = new StreamReader(stream, coding);
    
                //将数据流转换文字符串
                string result = sr.ReadToEnd();
    
                //关闭流数据
                stream.Close();
                sr.Close();
    
                return result;
            }
    //只需在证书验证的回调函数中添加几行代码即可
    //
    回调验证证书问题 public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { Console.WriteLine("证书的有效日期:" + certificate.GetEffectiveDateString()); Console.WriteLine("证书的到期日期:" + certificate.GetExpirationDateString()); Console.WriteLine("证书格式名称:" + certificate.GetFormat()); Console.WriteLine("证书办法机构名称:" + certificate.Issuer); Console.WriteLine("密钥算法信息:" + certificate.GetKeyAlgorithm()); Console.WriteLine("证书的公钥:" + certificate.GetPublicKeyString()); Console.WriteLine("证书序列号:" + certificate.GetSerialNumberString()); // 总是接受 return true; }

    使用如下GET方式访问百度。即可得到截图效果。  

        GetContent("https://www.baidu.com/", Encoding.UTF8);
        Console.WriteLine(str);

  • 相关阅读:
    YGC问题排查,又让我涨姿势了!
    AI时代,还不了解大数据?
    实战篇:一个核心系统 3 万行代码的重构之旅
    监控系统选型,这篇不可不读!
    实时离线一体大数据在资产租赁saas服务中使用
    基于监控服务打造微服务治理生态体系
    CDH6.3.2升级Hive到4.0.0
    强化学习 9 —— DQN 改进算法DDQN、Dueling DQN tensorflow 2.0 实现
    强化学习 8 —— DQN 算法 Tensorflow 2.0 实现
    强化学习 7——Deep Q-Learning(DQN)公式推导
  • 原文地址:https://www.cnblogs.com/DSC1991/p/12552012.html
Copyright © 2020-2023  润新知