三种方式在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.mzph.cn/news/594611.shtml

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

相关文章

智能化校园:深入探讨云端管理系统设计与实现(二)

系列文章目录 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 文章目录 系列文章目录功能开发登录功能分析验证码功能实现登录校验功能登录后跳转功能 系统管理器实现验证码响应图片功能实现异步图片上传头像功能实现全局修改密码功能实现 …

YOLOv8改进 | 主干篇 | CSWinTransformer交叉形窗口网络

一、本文介绍 本文给大家带来的改进机制是CSWin Transformer,其基于Transformer架构,创新性地引入了交叉形窗口自注意力机制,用于有效地并行处理图像的水平和垂直条带,形成交叉形窗口以提高计算效率。它还提出了局部增强位置编码(LePE),更好地处理局部位置信息,我将其…

HttpClient库与代理IP在爬虫程序中的应用

目录 前言 一、HttpClient库的基本使用方法 二、代理IP的使用方法 三、代理IP池的使用方法 四、总结 前言 在编写爬虫程序时&#xff0c;我们经常会使用HttpClient库来发送HTTP请求&#xff0c;获取网页内容。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#x…

前端工程化回顾-vite 构建神器

1.构建vite 项目 pnpm create vite2.常用的配置&#xff1a; 1.公共资源路径配置&#xff1a; base: ./, 默认是/2.路径别名配置&#xff1a; resolve: {alias: {: path.resolve(__dirname, ./src),ass: path.resolve(__dirname, ./src/assets),comp: path.resolve(__dirnam…

uni-app中实现元素拖动

uni-app中实现元素拖动 1、代码示例 <template><movable-area class"music-layout"><movable-view class"img-layout" :x"x" :y"y" direction"all"><img :src"musicDetail.bgUrl" :class&…

springboot+redisTemplate多库操作

单库操作 我做了依赖管理&#xff0c;所以就不写版本号了添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>配置文件 spring:redis:database: 2…

勒索检测能力升级,亚信安全发布《勒索家族和勒索事件监控报告》

评论员简评 近期(12.08-12.14)共发生勒索事件119起&#xff0c;相较之前呈现持平趋势。 与上周相比&#xff0c;本周仍然流行的勒索家族为lockbit3和8base。在涉及的勒索家族中&#xff0c;活跃程度Top5的勒索家族分别是&#xff1a;lockbit3、siegedsec、dragonforce、8base和…

MatrixOne 1.1.0 Release

我们非常高兴地宣布&#xff1a; MatrixOne内核1.1.0版本 正式发布啦&#xff01; 项目文档网站 https://docs.matrixorigin.cn MatrixOne是一款分布式超融合异构数据库&#xff0c;MatrixOne旨在提供一个云原生、高性能、高弹性、高度兼容MySQL的HSTAP数据库&#xff0c;让…

Oracle database 12cRAC异地恢复至单机

环境 rac 环境 byoradbrac Oracle12.1.0.2 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;172.17.38.4…

工具篇--Spring-Cloud--feign 通过feign 接口完成文件的下载

文章目录 前言一、feign接口获取文件流程&#xff1a;二、文件获取实现2.1 引入jar&#xff1a;2.2 实现&#xff1a; 总结 前言 通常在spring-boot 项目中&#xff0c;对于文件的下载都是直接调用到对应的服务中&#xff0c;而不是通过feign 接口获取文件&#xff1b;有时我们…

使用 Process Explorer 和 Windbg 排查软件线程堵塞案例分享

目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码&#xff0c;找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…

HubSpot电子邮件自动化的关键功能和流程!

HubSpot提供了强大的电子邮件自动化工具&#xff0c;使用户能够创建、执行和跟踪复杂的电子邮件市场营销活动。以下是HubSpot电子邮件自动化的一些关键功能和流程&#xff1a; 1.电子邮件工作流程&#xff08;Email Workflows&#xff09;&#xff1a; 用户可以使用HubSpot的工…

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…

【零基础入门TypeScript】判断条件和循环

目录 定环 无限循环 示例&#xff1a;while 与 do..while 中断语句 句法 流程图 例子 继续语句 句法 流程图 例子 输出 无限循环 语法&#xff1a;使用 for 循环的无限循环 示例&#xff1a;使用 for 循环的无限循环 语法&#xff1a;使用 while 循环进行无限循…

LeetCode-轮转数组的三种方法(189)

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 思路一&#xff1a; 建立一个两倍原数组长度的数组&#xff0c;然后其中保存两遍原数组中的元素&#xff0c;轮转的过程就可以看成是在这个新数组中截…

云计算:OpenStack 分布式架构管理VXLAN网络(单控制节点与多计算节点)

目录 一、实验 1.环境 2.各节点新增网卡准备VXLAN网络 3.控制节点配置私有网络 4.计算节点1配置私有网络 5.计算节点2配置私有网络 6.重启服务 7.修改Dashboard 8.新建项目&#xff08;租户&#xff09;及用户 9.新建网络与子网 10.新建实例 11.新建路由 12.新增浮…

物联网的网络管理技术开发

物联网并不是新的事物。不论称为物联网或者是传感网&#xff0c;物联网的基本组成可以看成为传感器网络接入互联网构成,当然也有仅仅是传感器网络组成的简单的物联网系统。但是总的来说,物联网有许多新的特点。这些特点导致物联网对于其网络的管理有新的要求。因此电信网和互联…

算法与数据结构之数组(Java)

目录 1、数组的定义 2、线性结构与非线性结构 3、数组的表现形式 3.1 一维数组 3.2 多维数组 4、重要特性&#xff1a;随机访问 5、ArrayList和数组 6、堆内存和栈内存 7、数组的增删查改 7.1 插入数据 7.2 删除一个数据 7.3 修改数组 7.4 查找数据 8、总结 什么…

视频监控可视化云平台EasyCVR智能视频技术优势分析

TSINGSEE青犀视频安防视频管理系统EasyCVR视频智能融合共享平台&#xff0c;是一个支持Windows/Linux(CentOS ubuntu)/国产化系统的视频管理平台。平台可以支持多协议接入&#xff0c;通过视频应用引擎将多种格式的视频数据转换为统一的视频流数据&#xff0c;支持无插件H5直播…

RK3568平台 input输入子系统

一.input子系统简介 Input 子系统是管理输入的子系统&#xff0c; 和 pinctrl 和 gpio 子系统一样&#xff0c; 都是 Linux 内核针对某一类设备而创建的框架。 input 子系统处理输入事务&#xff0c; 任何输入设备的驱动程序都可以通过 input 输入子系统提供的接口注册到内核&…