三种方式在ASP.NET Core中实现代理功能请求获取数据的接口(以请求百度统计数据接口为例)

一、定义请求数据属性

TargetUrl参数是目标接口的URL,RequestDataArray参数是要发送的请求数据列表
 //定义属性:TargetUrl参数是目标接口的URL,RequestDataArray参数是要发送的请求数据列表public class ToResponseBody{[JsonPropertyName("TargetUrl")]public string TargetUrl { get; set; } = "";[JsonPropertyName("RequestDataArray")]public string[] RequestDataArray { get; set; } = null;}

二、定义api返回数据内容形式

  public class ApiReturnData{public int code { get; set; } = 0;public string msg { get; set; } = "";public dynamic data { get; set; } = new ExpandoObject();}

三、百度统计api简介:

(1)大家首先进入以下网址:这个网址介绍了 用户如果要调用百度账号的 API 接口,需要通过百度开发者中心的身份验证,具体步骤进入网址中查看(里面介绍得非常详细):

 地址:https://tongji.baidu.com/api/manual/Chapter2/openapi.html

(2)接着再进入接口网址:

 地址:https://tongji.baidu.com/api/manual/Chapter1/overview_getTimeTrendRpt.html

其中里面有很多接口:
在这里插入图片描述
以其中 【网站概况(趋势数据)】为例:里面包含请求的关键参数与接口地址
在这里插入图片描述
在这里插入图片描述
以上就是一个基本介绍,详细内容大家可以在官网里面仔细查看!

四、实现方法:

方法一:使用HttpClient类:HttpClient类是一个强大的HTTP客户端,可以用于发送HTTP请求并接收响应。您可以使用它来实现代理功能,发送请求到目标接口并返回响应。(代码中有注释,大家可以参考)
[AllowAnonymous]
[HttpPost("GetResponseBody")]public async ValueTask<ApiReturnData> GetResponseBody([FromBody] ToResponseBody request) {//使用HttpClient类:HttpClient类是一个强大的HTTP客户端,可以用于发送HTTP请求并接收响应。您可以使用它来实现代理功能,发送请求到目标接口并返回响应。//代码中的targetUrl参数是目标接口的URL,requestData参数是要发送的请求数据try{using (HttpClient client = new HttpClient()){// 创建HttpRequestMessage对象,设置HTTP方法和请求内容HttpRequestMessage requests = new HttpRequestMessage(HttpMethod.Post, request.TargetUrl);/*foreach (string element in request.RequestDataArray){Console.WriteLine(element);}*/string metrics = "";// 将请求的metrics参数进行拼接for (int i = 4;i< request.RequestDataArray.Length; i++){metrics =request.RequestDataArray[i] + "," + metrics;}string reqdata = String.Format("&site_id={0}&method={1}&start_date={2}&end_date={3}&metrics={4}", request.RequestDataArray[0], request.RequestDataArray[1], request.RequestDataArray[2], request.RequestDataArray[3], metrics);requests.Content = new StringContent(reqdata, System.Text.Encoding.UTF8, "application/json");// 发送HTTP请求并获取响应HttpResponseMessage response = await client.SendAsync(requests);// 确保请求成功response.EnsureSuccessStatusCode();// 读取响应内容string responseData = await response.Content.ReadAsStringAsync();// 创建返回数据对象rtApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = responseData;return rt;}}catch (Exception ex){ApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = ex.Message;return rt;}}

结果如下:
参数输入
在这里插入图片描述
得到的数据:
在这里插入图片描述

方法二:使用WebClient类:WebClient类是一个简单的HTTP客户端,可以用于发送HTTP请求并接收响应。您可以使用它来实现代理功能,发送请求到目标接口并返回响应。
[AllowAnonymous]
[HttpPost("GetResponseBody1")]
public async ValueTask<ApiReturnData> GetResponseBody1([FromBody] ToResponseBody request)
{try{using (WebClient client = new WebClient()){// 设置请求头client.Headers[HttpRequestHeader.ContentType] = "application/json";string metrics = "";// 将请求的metrics参数进行拼接for (int i = 4; i < request.RequestDataArray.Length; i++){metrics = request.RequestDataArray[i] + "," + metrics;}string reqdata = String.Format("&site_id={0}&method={1}&start_date={2}&end_date={3}&metrics={4}", request.RequestDataArray[0], request.RequestDataArray[1], request.RequestDataArray[2], request.RequestDataArray[3], metrics);// 发送HTTP请求并获取响应string responseData = await client.UploadStringTaskAsync(request.TargetUrl, "POST", reqdata);ApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = responseData;return rt;}}catch (Exception ex){ApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = ex.Message;return rt;}
}

结果如下:
在这里插入图片描述
在这里插入图片描述

方法三:使用HttpWebRequest类:HttpWebRequest类是一个更底层的HTTP客户端,可以用于发送HTTP请求并接收响应。您可以使用它来实现代理功能,发送请求到目标接口并返回响应。
      [AllowAnonymous][HttpPost("GetResponseBody2")]public async ValueTask<ApiReturnData> GetResponseBody2([FromBody] ToResponseBody request){try{// 创建HttpWebRequest对象HttpWebRequest requests = (HttpWebRequest)WebRequest.Create(request.TargetUrl);requests.Method = "POST";requests.ContentType = "application/json";string metrics = "";// 将请求的metrics参数进行拼接for (int i = 4; i < request.RequestDataArray.Length; i++){metrics = request.RequestDataArray[i] + "," + metrics;}string reqdata = String.Format("&site_id={0}&method={1}&start_date={2}&end_date={3}&metrics={4}", request.RequestDataArray[0], request.RequestDataArray[1], request.RequestDataArray[2], request.RequestDataArray[3], metrics);// 将请求内容写入请求流using (StreamWriter writer = new StreamWriter(requests.GetRequestStream())){writer.Write(reqdata);}// 发送HTTP请求并获取响应using (HttpWebResponse response = (HttpWebResponse)await requests.GetResponseAsync()){// 读取响应流using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){string responseData = await reader.ReadToEndAsync();ApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = responseData;return rt;}}}catch (Exception ex){ApiReturnData rt = new ApiReturnData();rt.code = 0;rt.msg = "";rt.data.ResponseBody = ex.Message;return rt;}}

结果如下:
在这里插入图片描述
在这里插入图片描述
以上就是本节的一个简单介绍,大家可以借鉴参考一下,有什么不足的地方大家指出一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/318254.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成 --【本人】

一、插件安装 1.1 搜索插件 mybatis 安装 1.2 接受安装 1.3 再次进入&#xff0c;说明安装好了 1.4 与鱼皮不同点 1&#xff09;mybatis 版本不一致 鱼皮&#xff1a; 本人&#xff1a; 2&#xff09;鱼皮需重启安装 本人不需要 1.5 【需完成 三、步骤&#xff0c;再来看】 …

阶段五-JavaWeb综合练习-学生管理系统

一.项目说明 1.前台 (用户使用) 前端,后端 2.后台 (管理员使用) 前端,后端 3.该项目为后台管理系统 项目开发流程: 1.需求分析 1.1 登录功能 用户访问登录页面输入用户名和密码,并且输入验证码。全部输入正确后点击登录&#xff0c;登录成功跳转主页面&#xff1b;登录…

Allins 官网上线,标志铭文赛道正式进入 AMM 交易时代

“Allins 正在通过全新的 AMM 方案为BRC20及多链铭文资产拓展 DeFi 场景&#xff0c;官网的全新上线意味着铭文资产的交易正式进入 AMM 时代。”

单片机外设矩阵键盘之线反转法识别原理与示例

单片机外设矩阵键盘之线反转法识别原理与示例 1.概述 这篇文章主要介绍单片机接收 4X4矩阵键盘发出的指令&#xff0c;做出对应的反馈。其中主要介绍矩阵键盘线反转方式的识别原理和实操。 2.矩阵键盘线反转识别原理 2.1.矩阵键盘硬件接线原理 矩阵键盘的硬件接线方式有多种…

Linux网络编程学习心得.4

1.epoll工作模式 水平触发 LT 边沿触发 ET 因为设置为水平触发,只要缓存区有数据epoll_wait就会被触发,epoll_wait是一个系统调用,尽量少调用 所以尽量使用边沿触发,边沿出触发数据来一次只触发一次,这个时候要求一次性将数据读完,所以while循环读,读到最后read默认带阻塞…

LLVM(简介)

历史 LLVM(low level virtual machine)起源于伊利诺伊大学的一个编译器实验项目&#xff0c;目前已经发展成一个集编译器和工具链为一体的商业开源项目&#xff0c;因此其英文名称的含义被扩大&#xff0c;不再仅仅是字面意思。其创始人为 Chris Lattner。LLVM项目遵循的开源许…

飞腾Ubantu22.04.3安装OpenNebula测试

1.概述 因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包&#xff0c;借此用源码编译进行测试。 2.官网github地址 下载解压存放在服务器上&#xff1a; https://github.com/OpenNebula/minione/blob/master文件目录&#xff1a; 3.安装依赖包 sudo apt -y …

模拟Spring事件监听机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 之前我们一起学习了Spr…

基于ssm+vue服装商城购物系统

摘要 在基于SSM框架和Vue.js的服装商城购物系统中&#xff0c;整合了多种先进的技术&#xff0c;为电子商务领域的发展提供了有力支持。该系统不仅仅是技术层面的整合&#xff0c;更是对于业务流程和用户体验的深入考虑。以下是对该系统扩展的一些关键方面的讨论&#xff0c;以…

AUTOSAR中 CAN总线数据通过COM模块收发流程

目录 AUTOSAR中CAN总线数据通过COM模块收发流程1、AUTOSAR中 CAN总线数据通过COM模块发送流程2、AUTOSAR中 CAN总线数据通过COM模块接收流程 AUTOSAR中CAN总线数据通过COM模块收发流程 printf("欢迎关注公众号&#xff1a;车载嵌入式探索者&#xff0c;博主建立了一个车规…

快速入门ESP32——点亮你的第一个LCD屏幕

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 快速入门ESP32—— 解决platformIO添加开源库下载失败的问题 快速入门ESP32——点亮你的第一个LCD屏幕 前言一、移植T…

市场复盘总结 20240103

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整 昨日回顾: 方法一:指标选股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240103;方法二:趋势选股法 1、最低价持续3日上涨 2、均价…