0


C#中的HttpContent、HttpClientHandle、HttpWebRequest

C#中的HttpContent

在C#中,

HttpContent

System.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

。然后使用

HttpClient

PostAsync

方法发送POST请求,并使用

ReadAsStringAsync

异步读取响应内容。

**在使用

HttpContent

时,应该使用

await

关键字来等待异步操作完成,这样可以避免阻塞线程**

C#中的HttpClientHandler

在C#中,

HttpClientHandler

System.Net.Http

命名空间下的一个类,它提供了对

HttpClient

实例的配置和请求发送的控制。

HttpClientHandler

负责处理与HTTP请求和响应相关的底层细节,例如网络连接、代理、Cookie、重定向等。

HttpClientHandler

DelegatingHandler

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

以下是一些

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"),
            // 配置是否自动处理 cookies
            UseCookies = 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.BeginGetRequestStream

HttpWebRequest.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请求的推荐方式**

标签: c# 开发语言

本文转载自: https://blog.csdn.net/weixin_64532720/article/details/143647326
版权归原作者 就是有点傻 所有, 如有侵权,请联系我们删除。

“C#中的HttpContent、HttpClientHandle、HttpWebRequest”的评论:

还没有评论