HttpClient
Один HttpClient живут долго:
новый клиент на каждый запрос занимает сокеты.
В примерах клиент создаётся со своим
HttpMessageHandler и закрывается
в конце. Сеть не вызывается - ответ
отдаёт заглушка на "http://abcde.example/".
Синтаксис
using var client = new HttpClient(new Stub());
string text = await client.GetStringAsync("http://abcde.example/");
Пример
Давайте скачать текст через заглушку:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient(new Stub());
string res = await client.GetStringAsync(
"http://abcde.example/");
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте выполнить два запроса одним клиентом:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient(new Stub());
string first = await client.GetStringAsync(
"http://abcde.example/");
string second = await client.GetStringAsync(
"http://abcde.example/");
bool res = first == second;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте прочитать код ответа:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient(new Stub());
HttpResponseMessage response = await client.GetAsync(
"http://abcde.example/");
int res = (int)response.StatusCode;
Console.WriteLine(res);
}
}
Результат выполнения кода:
200
Смотрите также
-
GetStringAsync,
текст ответа -
IHttpClientFactory,
клиент из фабрики -
Timeout,
предел ожидания -
Dispose,
закрытие клиента