当前位置: 首页 > news >正文

C#中的HttpContent、HttpClientHandle、HttpWebRequest

C#中的HttpContent

在C#中,HttpContentSystem.Net.Http 命名空间下的一个类,它是 HttpClient 类用来发送和接收HTTP内容的基础。HttpContent 表示HTTP请求或响应的正文内容,并且可以序列化和反序列化数据。

HttpContent 是一个抽象类,提供了一个基类来处理HTTP消息体。它包含了一系列的方法和属性,用于读取和写入HTTP内容。以下是一些常用的 HttpContent 派生类:

  1. StringContent:用于发送字符串内容。
  2. ByteArrayContent:用于发送字节数组。
  3. StreamContent:用于发送流数据。
  4. MultipartContent:用于发送多部分(multipart)内容,通常用于上传文件。
  5. FormUrlEncodedContent:用于发送URL编码的表单数据。

HttpContent 提供了以下主要方法和属性:

  • ReadAsStringAsync():异步读取内容为字符串。
  • ReadAsByteArrayAsync():异步读取内容为字节数组。
  • ReadAsStreamAsync():异步读取内容为流。
  • SerializeToStreamAsync(Stream stream, TransportContext context):将内容序列化到流中。
  • TryComputeLength(out long length):尝试计算内容长度。
  • Headers:获取或设置内容的HTTP头。

使用 HttpContent 时,通常需要调用 ReadAsStringAsync() 或其他异步读取方法来获取响应内容,因为 HttpContent 并不直接存储数据,而是提供了读取数据的方法。

下面是一个使用 HttpContent 发送POST请求的简单示例:

using System.Net.Http;
using System.Threading.Tasks;public class MyHttpClient
{public async Task<string> PostDataAsync(string url, string data){using (var client = new HttpClient()){// 创建StringContent实例var content = new StringContent(data, System.Text.Encoding.UTF8, "application/json");// 发送POST请求并等待响应var response = await client.PostAsync(url, content);// 确保响应状态为成功response.EnsureSuccessStatusCode();// 读取响应内容var responseContent = await response.Content.ReadAsStringAsync();return responseContent;}}
}

在这个示例中,创建了一个 StringContent 实例来包含要发送的数据,并指定了内容类型为 application/json。然后使用 HttpClientPostAsync 方法发送POST请求,并使用 ReadAsStringAsync 异步读取响应内容。

在使用 HttpContent 时,应该使用 await 关键字来等待异步操作完成,这样可以避免阻塞线程

 

C#中的HttpClientHandler 

在C#中,HttpClientHandlerSystem.Net.Http 命名空间下的一个类,它提供了对 HttpClient 实例的配置和请求发送的控制。HttpClientHandler 负责处理与HTTP请求和响应相关的底层细节,例如网络连接、代理、Cookie、重定向等。

HttpClientHandlerDelegatingHandler 类的一个派生类,可以被用来创建一个处理程序链,其中每个处理程序可以处理传入的请求和传出的响应。这使得开发者可以插入自定义的逻辑,例如日志记录、错误处理、身份验证等。

以下是一些 HttpClientHandler 的常用属性和方法:

  • UseCookies: 一个布尔值,指示是否应该使用 CookieContainer 来自动处理 cookies。
  • CookieContainer: 一个 CookieContainer 实例,用于存储和管理 cookies。
  • UseDefaultCredentials: 一个布尔值,指示是否应该使用默认的网络凭据(例如,当前用户的凭据)来发送请求。
  • UseProxy: 一个布尔值,指示是否应该使用默认的代理设置发送请求。
  • Proxy: 一个 IWebProxy 实例,用于配置代理服务器。
  • ServerCertificateCustomValidationCallback: 一个回调函数,用于自定义服务器证书的验证逻辑。
  • PreAuthenticate: 一个布尔值,指示是否应该发送请求时预认证。
  • Credentials: 一个 ICredentials 实例,用于提供网络认证凭据。
  • SendAsync: 一个方法,用于发送HTTP请求。

以下是一个简单的示例,展示了如何使用 HttpClientHandler 来创建一个 HttpClient 实例,并配置一些常见的设置:

using System;
using System.Net;
using System.Net.Http;public class Program
{public static async Task Main(string[] args){// 创建 HttpClientHandler 实例var handler = new HttpClientHandler{// 配置是否使用默认的网络凭据UseDefaultCredentials = true,// 配置是否使用代理UseProxy = true,// 配置代理服务器Proxy = new WebProxy("http://your-proxy-server:port"),// 配置是否自动处理 cookiesUseCookies = true,// 配置自定义的服务器证书验证逻辑ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true};// 使用 HttpClientHandler 创建 HttpClient 实例using (var client = new HttpClient(handler)){// 发送请求并获取响应var response = await client.GetAsync("http://example.com");var responseContent = await response.Content.ReadAsStringAsync();Console.WriteLine(responseContent);}}
}

在这个示例中,创建了一个 HttpClientHandler 实例,并配置了使用默认凭据、代理服务器和自动处理 cookies。然后使用这个处理程序实例来创建一个 HttpClient 对象,并发送一个GET请求。

HttpClientHandler 提供了一种灵活的方式来配置和扩展 HttpClient 的行为

C#中的HttpWebRequest

HttpWebRequest 是 .NET Framework 中的一个类,属于 System.Net 命名空间,用于发送 HTTP 请求和接收 HTTP 响应。它是 WebRequest 类的一个子类,专门用于处理 HTTP 协议的网络请求。

HttpWebRequest 提供了一系列属性和方法来配置请求、发送数据和接收响应。以下是一些常用的属性和方法:

  • Address: 获取或设置请求的 URI。
  • Method: 获取或设置 HTTP 方法(例如 GET、POST、PUT、DELETE 等)。
  • ContentType: 获取或设置请求的内容类型。
  • Headers: 获取 HTTP 头集合。
  • ContentLength: 获取或设置请求正文的长度。
  • UserAgent: 获取或设置用户代理字符串。
  • Credentials: 获取或设置请求的网络凭据。
  • Cookies: 获取或设置请求的 Cookie 容器。
  • KeepAlive: 获取或设置一个值,该值指示是否使用 HTTP 持久连接。
  • Timeout: 获取或设置请求的超时值。
  • ReadWriteTimeout: 获取或设置用于读取或写入的超时值。
  • GetRequestStream: 获取请求的流,用于发送请求正文。
  • GetResponse: 发送请求并返回响应。

以下是一个使用 HttpWebRequest 发送 POST 请求的示例:

using System;
using System.IO;
using System.Net;
using System.Text;public class HttpWebRequestExample
{public static void Main(){// 创建 HttpWebRequest 实例var request = (HttpWebRequest)WebRequest.Create("http://example.com/api/data");// 配置请求方法和内容类型request.Method = "POST";request.ContentType = "application/json";// 设置请求正文string json = "{\"key1\":\"value1\",\"key2\":\"value2\"}";byte[] byteArray = Encoding.UTF8.GetBytes(json);request.ContentLength = byteArray.Length;// 获取请求流并写入数据using (var stream = request.GetRequestStream()){stream.Write(byteArray, 0, byteArray.Length);}// 发送请求并获取响应try{var response = (HttpWebResponse)request.GetResponse();using (var reader = new StreamReader(response.GetResponseStream())){var responseContent = reader.ReadToEnd();Console.WriteLine(responseContent);}}catch (WebException ex){// 处理异常Console.WriteLine("Error: " + ex.Message);}}
}

在这个示例中,我们创建了一个 HttpWebRequest 实例,配置了请求方法为 POST,并设置了内容类型为 application/json。然后,我们创建了一个 JSON 字符串作为请求正文,并将其写入请求流中。最后,我们发送请求并读取响应内容。

HttpWebRequest 是一个同步类,所有操作默认都是阻塞的。如果你需要异步操作,可以使用 HttpWebRequest.BeginGetRequestStreamHttpWebRequest.BeginGetResponse 方法。

需要注意的是,HttpWebRequest 是 .NET Framework 中的旧类,而在 .NET Core 和 .NET 5/6 中,推荐使用 HttpClient 类,因为它提供了更现代、更简洁的 API,并且支持异步操作。HttpClient 在功能上与 HttpWebRequest 类似

C#中的HttpClient 

HttpClient 是 .NET 中用于发送HTTP请求和接收HTTP响应的类,属于 System.Net.Http 命名空间。它提供了一个现代、易于使用且支持异步操作的API,是 .NET Core 和 .NET 5/6 中推荐使用的HTTP客户端。

HttpClient 的主要特点包括:

  1. 异步编程模型HttpClient 的方法默认是异步的,使用 asyncawait 关键字,这有助于提高应用程序的响应性和吞吐量。

  2. 基于任务的异步模式HttpClient 返回 TaskTask<T> 对象,这使得异步操作更加灵活和强大。

  3. 支持HTTP/1.1和HTTP/2HttpClient 支持HTTP协议的两个主要版本,允许更高效的通信。

  4. 可扩展性HttpClient 可以通过消息处理器(如 HttpClientHandler)和委托来自定义其行为。

  5. 连接管理HttpClient 可以自动管理HTTP连接,支持连接复用和持久连接。

  6. 内容处理HttpClient 提供了多种处理HTTP内容的方式,如 StringContentByteArrayContentStreamContent 等。

  7. HTTP功能HttpClient 支持各种HTTP功能,包括HTTP头、HTTP方法(如GET、POST、PUT、DELETE等)、身份验证、重定向处理等。

下面是一个使用 HttpClient 发送GET请求并接收响应的简单示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;public class HttpClientExample
{public static async Task Main(string[] args){// 创建HttpClient实例using (var client = new HttpClient()){// 发送GET请求var response = await client.GetAsync("http://example.com");// 确保HTTP成功状态值response.EnsureSuccessStatusCode();// 读取响应内容var responseContent = await response.Content.ReadAsStringAsync();Console.WriteLine(responseContent);}}
}

在这个示例中,我们创建了一个 HttpClient 实例,使用 GetAsync 方法发送GET请求,并使用 ReadAsStringAsync 方法读取响应内容。EnsureSuccessStatusCode 方法用于抛出异常,如果响应状态码指示错误(如404或500)。

HttpClient 也常用于发送POST请求和其他类型的HTTP请求,可以通过设置 HttpContent 来发送请求体:

var content = new StringContent("your request data", Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://example.com/api/data", content);

HttpClient 是 .NET 中处理HTTP请求的推荐方式

http://www.lryc.cn/news/482552.html

相关文章:

  • 23.网工入门篇--------介绍一下园区网典型组网架构及案例实践
  • QT鼠标事件
  • Ubuntu 的 ROS 操作系统turtlebot3环境搭建
  • C++笔记---异常
  • Python 操作数据库:读取 Clickhouse 数据存入csv文件
  • 如何找到系统中bert-base-uncased默认安装位置
  • 在启动 Spring Boot 项目时,报找不到 slf4j 的错误
  • android-12-source-code--write-file-function
  • SQL(2)
  • 【IC每日一题:AMBA总线--APB协议时序及Verilog实现】
  • 抢先看!为什么很多公司会强行给员工电脑加屏幕水印?千字长文来解答
  • 【AI技术】PaddleSpeech部署方案
  • 可灵开始“独闯”,全面拥抱AI的快手能否尝到“甜头”?
  • qt QtConcurrent 详解
  • 基于构件的软件开发、软件维护、区块链技术及湖仓一体架构的应用
  • 【在Typora中绘制用户旅程图和甘特图】
  • 【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(2)
  • uniapp中使用全局样式文件引入的三种方式
  • 计算机网络易混淆知识点串记
  • Java代码审计-模板注入漏洞
  • 如何在Linux中使用Cron定时执行SQL任务
  • 数据集划分
  • 带你读懂什么是AI Agent智能体
  • react动态路由
  • Linux基础(十四)——BASH
  • 架构师备考-概念背诵(系统架构)
  • 如何让ffmpeg运行时从当前目录加载库,而不是从/lib64
  • Kafka-Controller选举
  • 必知的 Vue3 组件传值技巧:解锁组件交互新姿势
  • 【论文阅读】医学SAM适配器:适应医学图像分割的任意分割模型