首页 > 其他分享 >借助HttpWebRequest 调用第三方接口,获取Token和数据

借助HttpWebRequest 调用第三方接口,获取Token和数据

时间:2024-03-18 21:44:25浏览次数:16  
标签:httpRequest responseString string 接口 Warn Token HttpWebRequest logger

在一次项目中,在给客户做系统时,需要调用客户的系统获取数据,客户提供了获取Token和获取数据的接口,用户名和密码,认证方式是基于Bearer的,通过学习和找资料,提供一个C#示例

一个C#示例

1、传入语句获取数据
         /// <summary>
        /// 传入语句获取数据
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task<string> ThirdSystemDataPostAsync(string param,string dataUrlAddress)
        {
            string token = await Bearer_TokenPostAsync();
            _logger.Warn($"获取Token结构:{token}");
            string responseString = string.Empty;
            try
            {
                var tokenJson = JsonConvert.DeserializeObject<TokenResultDto>(token);
                _logger.Warn($"获取Token值参数据:{tokenJson}");

                //跳过ssl验证
                ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
                // 创建HttpWebRequest对象
                HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(dataUrlAddress);
                _logger.Warn($"入参数据:{param}");
                _logger.Warn($"智慧系统数据地址:{dataUrlAddress}");
                // 设置Post调⽤⽅法
                httpRequest.Method = "Post";
                //设置参数传输类型
                httpRequest.ContentType = " application/json; charset=utf-8";
                // 设置Http Bearer认证的请求头
                httpRequest.Headers.Add("Authorization", "Bearer " + tokenJson.accessToken);
                //传输参数格式转换
                byte[] bytesRequestData = Encoding.UTF8.GetBytes(param);
                //_logger.Warn($"入参数据格式转换:{bytesRequestData}");
                httpRequest.ContentLength = bytesRequestData.Length;
                Stream postStream = await httpRequest.GetRequestStreamAsync();
                postStream.Write(bytesRequestData, 0, bytesRequestData.Length);
                postStream.Close();
                //获取设置身份认证及请求超时时间
                SetWebRequest(httpRequest);
                // HttpWebRequest发起调⽤
                using (HttpWebResponse myResponse = (HttpWebResponse)httpRequest.GetResponse())
                {
                    //myResponse.StatusCode
                    // StreamReader对象
                    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

                    // 返回结果
                    responseString = sr.ReadToEnd();

                    _logger.Warn($"调用智慧系统返回结果数据:{responseString}");
                    return responseString;
                }
            }
            catch (Exception ex)
            {
                //返回错误信息
                responseString = ex.ToString();
            }
            return responseString;

        }
2、获取token
         /// <summary>
        /// 获取token
        /// </summary>
        /// <returns></returns>
        private async Task<string> Bearer_TokenPostAsync(string sSoUrlAddress,string userName,string userPassword)
        {
            string responseString = string.Empty;
            try
            {
                // 创建HttpWebRequest对象
                HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(sSoUrlAddress);
                _logger.Warn($"智慧系统Token地址:{sSoUrlAddress}");
                // 设置Post调⽤⽅法
                httpRequest.Method = "Post";
                //设置参数传输类型
                httpRequest.ContentType = " application/json; charset=utf-8";
                // 设置用户名和密码
                var usermesg = new UserMesgInput()
                {
                    Username = userName,
                    Password = userPassword,
                    UserDetail = true
                };
                string base64 = JsonConvert.SerializeObject(usermesg);
                //传输参数格式转换
                byte[] bytesRequestData = Encoding.UTF8.GetBytes(base64);
                //_logger.Warn($"入参数据格式转换:{bytesRequestData}");
                httpRequest.ContentLength = bytesRequestData.Length;

                Stream postStream = await httpRequest.GetRequestStreamAsync();
                postStream.Write(bytesRequestData, 0, bytesRequestData.Length);

                postStream.Close();
                //获取设置身份认证及请求超时时间
                SetWebRequest(httpRequest);
                _logger.Warn($"获取设置身份认证及请求超时时间");
                // HttpWebRequest发起调⽤
                using (HttpWebResponse myResponse = (HttpWebResponse)httpRequest.GetResponse())
                {
                    _logger.Warn($"StreamReader对象");
                    // StreamReader对象
                    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                    //_logger.Warn($"返回结果{sr.ReadToEnd()}");
                    // 返回结果
                    responseString = sr.ReadToEnd();
                  
                    _logger.Warn($"调用智慧系统返回结果Token:{responseString}");
                    //return responseString;
                }
            }
            catch (Exception ex)
            {
                //返回错误信息
                responseString = ex.ToString();
            }
            return responseString;
        }
3、获取设置身份认证及请求超时时间
        /// <summary>
        /// 获取设置身份认证及请求超时时间
        /// </summary>
        /// <param name="request"></param>
        private static void SetWebRequest(HttpWebRequest request)
        {
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Timeout = 1000000;

        }
4、在我使用的时候出现了下面的错误,通过查找是证书的问题,因为客户的web访问使用的IP地址访问,所以在代码中要加入跳过ssl验证的一行代码
System.Net.WebException: The SSL connection could not be established, see inner exception. The remote certificate is invalid according to the validation procedure.

标签:httpRequest,responseString,string,接口,Warn,Token,HttpWebRequest,logger
From: https://www.cnblogs.com/moonstars/p/17276990.html

相关文章

  • 【Java】梳理总结:类与对象|面向对象三大特征|接口 抽象类
    目录一、类与对象1、面向对象和面向过程面向过程:侧重的是过程面向对象:侧重的是对象2、类与对象1、造车2、面向对象的世界里:3、写代码:3、方法/函数重载4、构造方法(构造方法的重载)1、无参构造2、有参构造3、构造方法也是方法,也可以进行重载5、this关键字6、局部......
  • ISIS接口MD5 算法认证实验简述
    默认情况下,ISIS接口认证通过在ISIS协议数据单元(PDU)中添加认证字段,例如:MD5算法,用于验证发送方的身份。ISIS接口认证防止未经授权的设备加入到网络中,并确保邻居之间的通信是可信的。它可以有效地防止路由欺骗和其他恶意攻击。MD5(MessageDigestAlgorithm5)是一种常用的信......
  • Go05-结构体+方法+面向对象三大特性+接口
    Go05-结构体+方法+面向对象三大特性+接口1.Go面向对象Go支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象编程语言,所以说Go支持面向对象编程特性是比较准确的。Go中没有class类,Go中的结构体struct类似于其他编程中的类,即Go通过结构体struct实现面向对象编......
  • postman工具进行接口测试
    postman页面详情 三、postman请求方式【GET、POST、DELETE、PUT】1、使用Postman做接口测试的流程获取发送Request的请求信息以及Response的响应信息;点击添加接口测试,填写对应请求信息;点击send发送请求。2、请求响应协议码404的相关问题协议码404指请求资源不存在。当有......
  • 《优化接口设计的思路》系列:第九篇—用好缓存,让你的接口速度飞起来
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......
  • gRPC重试与接口幂等性
    目录一、gRPC超时重试1.1客户端1.2服务端1.3proto二、接口幂等性2.1什么是幂等性2.2什么情况下需要幂等2.3如何保证幂等(1)token机制(2)关键点先删除token,还是后删除token(3)token机制缺点(4)乐观锁机制(5)唯一主键(6)防重表(7)唯一ID(8)唯一ID机制一、gRPC超时重试使用开源的;https://g......
  • 网络实名制接口-GO语言身份核验接口代码-身份证实名认证
    互联网时代,人工识别身份证信息的方式已不适用于当下社会的发展需求,更需要高效精准的科技程序来支持,在线身份证实名认证接口必不可少。翔云身份证实名认证接口,可助力线上平台与消费者信用相关联,建立完善的客户资源与网络用户的管理。翔云身份证实名认证接口,实时联网核验用......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名认......
  • Java基础——抽象类和接口详细解读
    文章目录前言一、抽象类1、什么是抽象类?2、抽象类的定义规范和要求2.1、抽象类不能被实例化2.2、抽象类内的属性和方法定义2.2、抽象类的修饰符要求2.4、继承类要求3、抽象类的应用3.1、实现共有特性特征和行为3.2、代码复用4、抽象类总结二、接口1、什么是接口?2、接......