httpclient 客户端 接收响应不完整_C# 中 HttpClient 的简单使用

fd00c8cf31602c48e4466e6cc8503d19.png

介绍

当我们在开发客户端还有少部分服务端程序时,数据需要从 Webapi 服务器取得。在以前我使用的比较多的时 WebClient 和 HttpWebRequese,在新的 .Net 版本中,团队为其带来了更多的可选择性——新的 HttpClient。它有着更加灵活的 API。发送请求和接收响应主要是通过 HttpRequestMessage 和 HttpResponseMessage 这来给你个类,通过属性 Content 获取 http 响应内容。

区别

HttpClient 与 WebClient 和 HttpWebRequest 相比,有以下几个主义的

  1. HttpClient 实例初始化时不与服务器域名或者主机地址绑定,也就是說可以通过一个 HttpClient 实例发送多个不同的请求(比如同一个 HttpClient 请求 http://api.a.com 和 http://api.b.com 两个服务器数据)
  2. HttpClient 通过设置 DefaultHeaders 设置 HttpHeader 并且应用于该实例的所有请求
  3. HttpClient 使用可以很容易的处理异步请求(Async / Await)

使用方法

HttpClient 提供有与 Http Method 匹配的方法,比如 GET / POST / PUT ...等。

先实现模拟一个 GET 请求,代码如下

// 传入参数 url 为请求地址
async Task Get(string uri = "http://api.domain.com/search";)
{
    // 使用 using 语法建立一个明确周期的 HttpClient 实例
    using (HttpClient client = new HttpClient())
    {
        try
        {
            // 设置超时限制,有效防止浪费资源
            client.Timeout = TimeSpan.FromSeconds(30);
            //使用 GetAsync 进行异步 HTTPGET 请求
            HttpResponseMessage response = await client.GetAsync(uri);
            // 判断服务器响应代码是否为 2XX
            response.EnsureSuccessStatusCode();
            //使用 await 语法读取响应内容
            string responseBody = await response.Content.ReadAsStringAsync();
 
            Console.WriteLine(responseBody);
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine("Error Message :{0} ", e.Message);
        }
    }
}    

除了直接使用与 Http Method 对应的方法外,还可以单独构建 HttpRequestMessage 实例进行请求

async Task Get(string uri = "http://api.domain.com/search";)
{
    using (HttpClient client = new HttpClient())
    {
        HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, uri);
 
        await client.SendAsync(httpRequest)
                .ContinueWith(responseTask =>
                    {
                        Console.WriteLine("Response: {0}", responseTask.Result);
                    });
    }   
}

至于 Post 请求,对于初次接触 HttpClient 的人可能显得有些复杂,比较折腾,另一篇文章再讲解。

最后一点,对于不想折腾的人,建议直接使用 RestSharp ,简单好用,上手容易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要基于HTTP2.0客户端进行C#编程,可以使用HttpClient类。HttpClient是一个非常强大的类,它提供了许多可以用来发送和接收HTTP请求和响应的方法。使用HttpClient类,你可以轻松地在C#实现HTTP2.0客户端。 以下是使用HttpClient类实现HTTP2.0客户端的基本步骤: 1. 创建HttpClient对象。你可以创建一个新的HttpClient对象或者重用已有的HttpClient对象。 2. 配置HttpClient对象。你可以设置Http请求头、代理、超时等选项。 3. 创建HttpRequestMessage对象。HttpRequestMessage对象表示一个Http请求。你可以设置请求的方法、URL、头、正文等。 4. 发送Http请求。使用HttpClient对象的SendAsync方法发送HttpRequestMessage对象。 5. 获取HttpResponseMessage对象。HttpResponseMessage对象表示一个Http响应。你可以从HttpResponseMessage对象获取响应的状态、头、正文等。 6. 处理Http响应。根据需要,你可以处理Http响应的正文或者其他部分。 以下是一个使用HttpClient类实现HTTP2.0客户端的示例代码: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 创建HttpClient对象 using var client = new HttpClient(); // 配置HttpClient对象 client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml"); client.Timeout = TimeSpan.FromSeconds(30); // 创建HttpRequestMessage对象 var request = new HttpRequestMessage(HttpMethod.Get, "https://www.example.com/"); // 发送Http请求 using var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); // 获取HttpResponseMessage对象 var statusCode = (int)response.StatusCode; var contentLength = response.Content.Headers.ContentLength ?? -1; var contentType = response.Content.Headers.ContentType?.ToString() ?? "n/a"; Console.WriteLine($"Status: {statusCode}"); Console.WriteLine($"Content Type: {contentType}"); Console.WriteLine($"Content Length: {contentLength}"); } } ``` 在这个示例,我们创建了一个HttpClient对象,并将Accept头设置为"text/html,application/xhtml+xml,application/xml"。我们还将超时设置为30秒。然后,我们创建了一个HttpRequestMessage对象,表示一个Http GET请求。我们使用HttpClient对象的SendAsync方法发送HttpRequestMessage对象,并使用HttpCompletionOption.ResponseHeadersRead选项来指示HttpClient仅获取响应头。最后,我们从HttpResponseMessage对象获取状态码、内容长度和内容类型,并将它们打印到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值