.Net HttpClient 概述
HttpClient 概述
作用
HttpClient是一个用于发送HTTP请求和接收HTTP响应的类。它提供了一种现代化、灵活和强大的方式来与Web服务进行通信。HttpClient类位于System.Net.Http命名空间下,可以通过NuGet包管理器进行安装。
整体理解
HttpClient是应用程序进程中,封装调用远程请求的类库。整个远程的执行,是由进程向操作系统申请,经由网卡、路由器等网络设备转换、传输到一台Web服务器,然后返回的过程, HttpClient只是其中一个很小的环节。
在这个基础上,理解初代HttpClient问题(网络套接字用完 DNS问题等)、使用原则、请求管道、工厂模式、类型化客户端、Polly等项时会很轻松。比如:即便使用Using包括了 HttpClient,也会有套接字耗尽的问题,是因为using只能释放进程中的对象,但进程管理不了系统及网卡(这是在进程之上的),更不用说路由和互联网及被调用方的服务器了。
前世今生
WebRequest
这是.NET创建者最初开发用于使用HTTP请求的标准类。
使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。
HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复杂一些。
WebClient
WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。使用WebClient可能比HttpWebRequest直接使用更慢(大约几毫秒)。但这种“低效率”带来了巨大的好处:它需要更少的代码和隐藏了细节处理,更容易使用,并且在使用它时你不太可能犯错误。
HttpClient
HttpClient提供强大的功能,并提供了异步支持,可以轻松配合async await 实现异步请求等。
随着更新发展,已经解决了前期问题(套接字耗尽、DNS、不灵活等),并发展了完整、完善的体系(基于Task的异步、连接池、类型化的客户端、工厂模式、Polly等)。
是本项目的学习目标。
HttpClient架构图
.NetFramework 4及4.5 架构
HttpClient最初是作为NuGet包提供的,该包可以选择包含在.NET Framework 4.0项目中。在.NET Framework 4.5中,它作为BCL(基本类库)的一部分在框中提供。它建立在预先存在的HttpWebRequest实现之上。在.NET Framework中,ServicePoint API可用于控制和管理HTTP连接,包括通过为端点配置ConnectionLeaseTimeout来设置连接寿命。
.NET Core 1.0及1.1 架构
.NET Core 1.0最初于2016年6月发布。与.NET Framework中可用的版本相比,此第一个版本的API接口要小得多,主要用于构建ASP.NET Core Web应用程序。由于.NET Core 1.0是HttpClient,因此提供了API。但是,不包括用于HttpWebRequest和ServicePoint的API。.NET Core 1.0中的HttpClient直接建立在使用非托管代码的OS平台API之上,Windows API使用WinHTTP,Linux和Mac使用LibCurl。
值得注意的是:到2016年8月,很快就注意到,重新使用HttpClient实例以防止套接字耗尽的建议有一个相当麻烦的副作用:DNS
.NET Core 2.0 架构
在.NET Core 2.0中,添加了HttpWebRequest以支持.NET Standard 2.0。它位于HttpClient实现的顶层,这与.NET Framework 4.5+中的工作原理相反。还添加了ServicePoint,尽管它的许多API接口要么要么会抛出未实现的异常,要么根本就没有实现。
.NET CORE 2.1及后续 架构
这种有问题的行为导致团队不同团队进行了两项工作。
ASP.NET团队开始研究Microsoft.Extensions.Http包,该包的主要功能是IHttpClientFactory。这个针对HttpClient实例自用的工厂还包括基础HttpMessageHandler链的生命周期管理。如果您想了解有关此功能的更多信息,可以查看我的系列博客文章,我将在此介绍。
IHttpClientFactory功能是作为ASP.NET Core 2.1的一部分发布的,对于许多人来说,这是一个很好的折衷方案,它解决了连接重用以及生命周期管理的问题。
在同一时间范围内,.NET团队正在研究自己的解决方案。该团队也在.NET Core 2.1中发布,在HttpClient的处理程序链的核心引入了一个新的SocketsHttpHandler。该处理程序直接建立在Socket API之上,并在托管代码中实现HTTP。这项工作的一部分包括连接池系统以及为这些连接设置最大生存期的能力。
说明:虽然默认情况下从.NET Core 2.1启用了SocketsHttpHandler,但实现仅限于HTTP / 1.1通信。那些需要HTTP / 2的用户必须禁用该功能并使用较旧的处理程序链,该处理程序链像以前一样依赖非托管代码,并且不包括连接池。
幸运的是,.NET Core 3.0中已消除了此限制,并且现在提供了HTTP/2支持。这应该使用基于适合所有对象的SocketsHttpHandler链的HttpClient。
结语:从.Net core 2.1开始,架构逐步稳定、完善。.Net 5、6、7、8中,逐渐发展出一整套完整机制,包括但不限于 连接池、工厂模式、Polly等。
后续
后续将从基础使用到高级使用,一步步展开,一步步学习。
相关文章:
.Net HttpClient 概述
HttpClient 概述 作用 HttpClient是一个用于发送HTTP请求和接收HTTP响应的类。它提供了一种现代化、灵活和强大的方式来与Web服务进行通信。HttpClient类位于System.Net.Http命名空间下,可以通过NuGet包管理器进行安装。 整体理解 HttpClient是应用程序进程中&am…...
明远智睿SSD2351开发板:仪器仪表与智慧农业的创新利器
在仪器仪表和智慧农业领域,对设备的精度、稳定性和智能化程度有着较高的要求。明远智睿的SSD2351开发板以其独特的优势,成为这两个领域的创新利器。 在仪器仪表方面,SSD2351开发板的四核1.4GHz处理器能够快速处理仪器仪表采集到的各种数据&am…...
VBA -- 学习Day4
数组 创建数组: Dim 数组名(数组元素上下角标)[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意:1.如果不指定元素类型,则是Variant类型 向数组赋值: eg. MyArray(1) 100 MyArray(2) 200…...
Nacos源码—7.Nacos升级gRPC分析四
大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 6.微服务实例信息如何同步集群节点 (1)服务端处理服务注册时会发布一个ClientChangedEvent事件 (2)ClientChangedEvent事件的处理源码 (3)集群节点处理数据同步请求的源码 (1)服务端处理服务注册…...
Linux 学习笔记2
Linux 学习笔记2 一、定时任务调度操作流程注意事项 二、磁盘分区与管理添加新硬盘流程磁盘管理命令 三、进程管理进程操作命令服务管理(Ubuntu) 四、注意事项 一、定时任务调度 操作流程 创建脚本 vim /path/to/script.sh # 编写脚本内容设置可执行权…...
一、每日Github软件分享----QuickGo外链直达工具
QuickGo 是一款专注于提升网页浏览效率的浏览器扩展工具,其核心功能是自动绕过网站的安全跳转限制,让用户点击外链时无需手动确认,直接跳转至目标页面。以下是详细功能介绍与分析: 一、核心功能与亮点 极速跳转 通过优化浏览器 AP…...
【软件测试】软件缺陷(Bug)的详细描述
目录 一、软件缺陷(Bug) 1.1 缺陷的判定标准 1.2 缺陷的生命周期 1.3 软件缺陷的描述 1.3.1 提交缺陷的要素 1.3.2 Bug 的级别 1.4 如何发现更多的 Bug? 1.5 缺陷的有效管理 1.5.1 缺陷的编写 1.5.2 缺陷管理工具 1.5.2.1 缺陷管理 1.5.2.2 用例管理 一、软件缺陷…...
C++ stl中的list的相关函数用法
文章目录 list的介绍list的使用定义方式 插入和删除迭代器的使用获取元素容器中元素个数和容量的控制其它操作函数 list的使用,首先要包含头文件 #include <list>list的介绍 1.list是一种可以在常数范围内在链表中的任意位置进行插入和删除的序列式容器&…...
Cmd命令大全,从入门到放弃
1、文件和目录操作 dir /p:分页显示目录内容。 dir /w:以单行显示目录内容。 dir /s:显示指定目录及子目录下的所有文件。 dir /b:仅显示文件和目录名称。 dir /a:显示具有特定属性的文件和目录。 cd /d:改变当前驱动器。 pushd:将当前目录压入堆栈,并切换到指定…...
数据同步选择推Push还是拉Pull
数据同步选择“推”(Push)还是“拉”(Pull”,要根据实际场景、系统架构和对实时性、资源消耗、安全性的需求来决定。下面是两种方式的对比分析,帮你更好地判断: 文章目录 推模式(Pushÿ…...
Kafka集群加入新Broker节点会发生什么
Kafka集群加入新Broker节点会发生什么 当向现有的Kafka集群添加新的Broker节点时,会触发一系列自动和手动的过程。以下是详细的流程和影响: 自动发生的流程 集群发现与注册 新Broker启动时会向ZooKeeper注册自己加入集群的/brokers/ids路径下其他Broke…...
【LeetCode Solutions】LeetCode 176 ~ 180 题解
CONTENTS LeetCode 176. 第二高的薪水(SQL 中等)LeetCode 177. 第 N 高的薪水(SQL 中等)LeetCode 178. 分数排名(SQL 中等)LeetCode 179. 最大数(中等)LeetCode 180. 连续出现的数字…...
Sourcetree安装使用的详细教程
Sourcetree 是由 Atlassian 推出的 免费 Git 图形化客户端,支持 Git 和 Mercurial 仓库管理,适用于 Windows 和 macOS。 一、安装教程 1. 下载 官网地址:Sourcetree | Free Git GUI for Mac and Windows 选择你的平台下载安装包࿰…...
对比学习入门
Yann Lecun在NIPS 2016上提出了著名的“蛋糕比喻”:如果智能是一个蛋糕,蛋糕上的大部分是无监督学习(unsupervised learning),蛋糕上的糖霜是监督学习(supervised learning),而蛋糕上…...
Starrocks 的 ShortCircuit短路径
背景 本文基于 Starrocks 3.3.5 本文主要来探索一下Starrocks在FE端怎么实现 短路径,从而加速点查查询速度。 在用户层级需要设置 enable_short_circuit 为true 分析 数据流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…...
Windows远程访问Ubuntu的方法
要在Windows上远程访问Ubuntu系统,以下是几种常见的方法: SSH (Secure Shell):通过Windows命令行远程连接到Ubuntu。 在Ubuntu上,确保安装并启用了SSH服务(通常可以通过sudo apt update && sudo apt install openssh-serv…...
23种设计模式-行为型模式之模板方法模式(Java版本)
Java 模板方法模式(Template Method Pattern)详解 🧠 什么是模板方法模式? 模板方法模式是一种行为型设计模式,定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类中。通过模板方法模式,…...
(undone) MIT6.S081 Lec17 VM for APP 学习笔记
url: https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/lec17-virtual-memory-for-applications-frans/17.1-ying-yong-cheng-xu-shi-yong-xu-ni-nei-cun-suo-xu-yao-de-te-xing 17.1 应用程序使用虚拟内存所需要的特性 今天的话题是用户应用程序使用的虚拟内存…...
值拷贝、浅拷贝和深拷贝
✅ 一、基本概念 1. 值拷贝(Value Copy) 含义:将一个变量的值完整复制到另一个变量中。 对象级别表现:调用的是拷贝构造函数(copy constructor)。 特点:对基本类型或不含动态资源的对象&…...
JWT原理及工作流程详解
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全传输信息。其核心原理是通过结构化、签名或加密的JSON对象实现无状态身份验证和授权。以下是JWT的工作原理和关键组成部分: 1. JWT结构 J…...
广西某建筑用花岗岩矿自动化监测
1. 项目简介 某矿业有限公司成立于2021年,是由某建筑材料有限公司与个人共同出资成立,矿区面积0.4069平方公里,可开采筑用花岗岩、建筑用砂岩。建筑用花岗岩、建筑用砂岩可利用资源量分别为6338.69万吨、303.39万吨,设计生产规模…...
100个思维模型系列更新完毕!
giszz的粉丝们,到今天为止,思维模型专栏已经更新了100期,正式告一段落了。 以下是为你列出的100个思维模型名字(部分思维模型可能存在多种表述方式,但核心概念一致,这里尽量涵盖不同领域常见的思维模型&am…...
Bitcoin跨链协议Clementine的技术解析:重构DeFi生态的信任边界
2025年5月2日,比特币Rollup项目Citrea在测试网正式推出跨链协议Clementine,其基于BitVM2编程语言构建的信任最小化桥接技术,被视为解决比特币与DeFi生态融合难题的关键突破。本文从技术背景、核心机制、安全模型、应用场景四大维度࿰…...
北斗导航 | RTKLib中重难点技术,公式,代码
Rtklib 一、抗差自适应卡尔曼滤波1. **核心难点**2. **公式与代码实现**二、模糊度固定与LAMBDA算法1. **核心难点**2. **LAMBDA算法实现**3. **部分模糊度固定技术**三、伪距单点定位与误差修正1. **多系统多频点修正**2. **接收机钟差与系统间偏差**四、动态模型与周跳处理1.…...
C++学习之类和对象_1
1. 面向过程与面向对象 C语言是面向过程的,注重过程,通过调用函数解决问题。 比如做番茄炒蛋:买番茄和鸡蛋->洗番茄和打鸡蛋->先炒蛋->把蛋放碟子上->炒番茄->再把蛋倒回锅里->加调料->出锅 而C是面向对象的ÿ…...
Oracle OCP认证考试考点详解083系列14
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 66. 第66题: 题目 解析及答案: 当一个非常大的数据文件被划分为四个部分进行 RMAN 多区段备份时,以下…...
华为欧拉(EulerOS)系统全栈软件部署指南:从 Redis 到 MySQL 实战详解
前言 在国产化操作系统蓬勃发展的背景下,华为欧拉(EulerOS)凭借其稳定性与安全性,成为企业级服务器部署的重要选择。本文基于官方技术文档与最佳实践,详细梳理 Redis 集群、RabbitMQ、JDK、Tomcat 及 MySQL 在欧拉系统…...
YOLO使用CableInspect-AD数据集实现输电线路缺陷检测
输电线路缺陷检测是一个关键的任务,旨在确保电力传输系统的可靠性和安全性。今天我们使用CableInspect-AD数据集进行训练完成缺陷检测,下载的数据集格式如下: 我们需要经过以下步骤: COCO转YOLO 首先是将COCO格式的数据转换为YO…...
全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷五及详细答案解析
博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据如何解决
说明: 开发中经常会碰到线程并发,但是后续线程需要等待第一个线程执行完返回结果后,才能再执行后面线程。 如何处理呢,今天就介绍两种方法 1、使用Java自有的API即CountDownLatch,进行实现 思考:CountDown…...
python实现点餐系统
使用python实现点餐系统的增加菜品及价格,删除菜品,查询菜单,点菜以及会员折扣价等功能。 代码: 下面展示一些 内联代码片。 # coding utf-8menu {拍黄瓜: 6, 小炒肉: 28, 西红柿炒蛋: 18, 烤鱼: 30, 红烧肉: 38, 手撕鸡: 45,…...
力扣26——删除有序数组中的重复项
目录 1.题目描述: 2.算法分析: 3.代码展示: 1.题目描述: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对…...
A2A与MCP定义下,User,Agent,api(tool)间的交互流程图
官方图: 流程图: #mermaid-svg-2smjE8VYydjtLH0p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2smjE8VYydjtLH0p .error-icon{fill:#552222;}#mermaid-svg-2smjE8VYydjtLH0p .error-tex…...
【大模型面试每日一题】Day 13:数据并行与模型并行的区别是什么?ZeRO优化器如何结合二者?
【大模型面试每日一题】Day 13:数据并行与模型并行的区别是什么?ZeRO优化器如何结合二者? 📌 题目重现 🌟🌟 面试官:数据并行与模型并行的区别是什么?ZeRO优化器如何结合二者&…...
各种注解含义及使用
RestController RestController注解 是Spring 4.0引入的一个组合注解,用于简化RESTful Web服务的开发。 RestController注解 相当于 Controller 和 ResponseBody 注解的组合,表示该类是一个控制器,并且所有的方法返回值都将直接写入HTTP响应体…...
amass:深入攻击面映射和资产发现工具!全参数详细教程!Kali Linux教程!
简介 OWASP Amass 项目使用开源信息收集和主动侦察技术执行攻击面网络映射和外部资产发现。 此软件包包含一个工具,可帮助信息安全专业人员使用开源信息收集和主动侦察技术执行攻击面网络映射并执行外部资产发现。 使用的信息收集技术 技术数据来源APIs…...
xxl-job简单入门使用教程
1、从git中拉取xxl-job代码 https://gitee.com/xuxueli0323/xxl-job HTTPS:git clone https://gitee.com/xuxueli0323/xxl-job.git SSH:git clone gitgitee.com:xuxueli0323/xxl-job.git 拉取本地后,使用Idea打开项目,当前使用…...
设置GO程序在离线情况下读取本地缓存的模块
在 Go 中,GOPROXY 环境变量用于指定模块代理服务器的地址。如果你想让 GOPROXY 读取本地的模块,可以通过以下几种方式实现: 1. 使用本地代理服务器 你可以搭建一个本地的 Go 模块代理服务器,将需要的模块代码推送到代理服务器中…...
Python 爬虫基础入门教程(超详细)
一、什么是爬虫? 网络爬虫(Web Crawler),又称网页蜘蛛,是一种自动抓取互联网信息的程序。爬虫会模拟人的浏览行为,向网站发送请求,然后获取网页内容并提取有用的数据。 二、Python爬虫的基本原…...
C语言实现三子棋
目录 1.通过模块化来实现三子棋 2.三子棋代码基本逻辑 3.代码的书写 第一步: 第二步: 第三步: 第四步: gane.h gane.c main.c 第五步: game.h game.c main.c 第六步: game.h game.c main…...
SCDN是什么?
SCDN是安全内容分发网络的简称,它在传统内容分发网络(CDN)的基础上,集成了安全防护能力,旨在同时提升内容传输速度和网络安全性。 SCDN的核心功能有: DDoS防御:识别并抵御大规模分布式拒绝服务…...
Transformer编码器+SHAP分析,模型可解释创新表达!
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基本介绍 基于SHAP分析的特征选择和贡献度计算,Matlab2023b代码实现;基于MATLAB的SHAP可解释Transformer编码器回归模型,敏感性分析方法。 详细介绍 引言 在正向渗透(…...
机器学习第三讲:监督学习 → 带答案的学习册,如预测房价时需要历史价格数据
机器学习第三讲:监督学习 → 带答案的学习册,如预测房价时需要历史价格数据 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署࿱…...
【TACD模拟】质子辐照对GaN器件临界电压增加的影响机制
2013 年,佛罗里达大学的 Erin Patrick 等人基于 TRIM 和 FLOODS 模型,研究了质子辐照对 AlGaN/GaN HEMTs 的影响。研究背景方面,AlGaN/GaN HEMTs 因其宽禁带、高击穿场、高电子迁移率以及优秀的热管理能力,在商业和军事领域应用前景广阔,但长期可靠性仍是问题,尤其是栅极…...
VBA高级应用30例应用4:利用屏蔽事件来阻止自动运行事件
《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…...
基于SSM实现的健身房系统功能实现八
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升,健身行业也在迅速扩展。越来越多的人加入到健身行列,健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂,传统的手工或部分自动化的管…...
Java设计模式之原型模式详解:从入门到精通
1. 原型模式概述 1.1 定义与核心概念 **原型模式(Prototype Pattern)**是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过new关键字实例化。这种模式特别适用于创建成本较高的对象。 专业术语解释表: 术语解释原型(Prototype)被复制的原始对象克隆(Clone)…...
鞋样设计软件
Sxy 64鞋样设计软件是一款专业级鞋类设计工具 专为鞋业设计师与制鞋企业开发 该软件提供全面的鞋样设计功能 包括二维开版 三维建模 放码排料等核心模块 支持从草图构思到成品输出的完整设计流程 内置丰富的鞋型数据库与部件库 可快速生成各种鞋款模板 软件采用智能放码技术 精…...
移动IP与手机移动数据流量的概念、原理、区别与联系
移动IP与手机移动数据流量的概念、原理、区别与联系 文章目录 移动IP与手机移动数据流量的概念、原理、区别与联系一、概念与原理二、核心区别三、联系与协作四、技术挑战与发展趋势五、总结 一、概念与原理 移动IP 定义:移动IP是一种网络层协议,允许设…...
Spring中除DI之外获取 BEAN 的方式
前言 在 Spring 框架的开发实践中,获取 Bean 是极为重要的基础操作。我们熟知通过依赖注入能便捷地获取 Bean,不过在许多场景下,还需要借助其他方式来获取 Bean。本文将深入探讨在 Spring 中除了依赖注入之外获取 Bean 的多种方式,…...