HttpClient 类

定义

发送 HTTP 请求,并从 URI 标识的资源接收 HTTP 响应。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

public ref class HttpClient sealed : IClosable, IStringable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.Activatable(Windows.Web.Http.IHttpClientFactory, 65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class HttpClient final : IClosable, IStringable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.Activatable(Windows.Web.Http.IHttpClientFactory, 65536, "Windows.Foundation.UniversalApiContract")]
class HttpClient final : IClosable, IStringable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.Web.Http.IHttpClientFactory), 65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class HttpClient : System.IDisposable, IStringable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.Web.Http.IHttpClientFactory), 65536, "Windows.Foundation.UniversalApiContract")]
public sealed class HttpClient : System.IDisposable, IStringable
function HttpClient(filter)
Public NotInheritable Class HttpClient
Implements IDisposable, IStringable
继承
Object IInspectable HttpClient
属性
实现

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)

示例

以下示例代码演示如何以字符串的形式从 Web 服务器获取内容。

using System;

var uri = new System.Uri("http://www.bing.com");
using (var httpClient = new Windows.Web.Http.HttpClient())
{
    // Always catch network exceptions for async methods
    try
    {
        string result = await httpClient.GetStringAsync(uri);
    }
    catch (Exception ex)
    {
        // Details in ex.Message and ex.HResult.
    }
}
// Having exited the scope of the using statement, httpClient.Dispose() will be called
// automatically, thus freeing up system resources (the underlying socket, and memory
// used for the object).
#include "winrt/Windows.Foundation.h"
#include "winrt/Windows.Web.Http.h"
using namespace winrt;

Windows::Foundation::IAsyncAction HttpClientExample()
{
    Windows::Foundation::Uri uri{ L"http://www.bing.com" };
    Windows::Web::Http::HttpClient httpClient{};

    // Always catch network exceptions for async methods
    try
    {
        auto response{ co_await httpClient.GetStringAsync(uri) };
    }
    catch (winrt::hresult_error const& ex)
    {
        // Details in ex.message() and ex.to_abi().
    }

    // The destructor of HttpClient frees system resources
    // (the underlying socket, and memory used for the object).
}
using namespace Windows::Foundation;
using namespace Windows::Web::Http;

uri = ref new Uri("http://example.com/datalist.aspx");
httpClient = ref new HttpClient();

// Always catch network exceptions for async methods
try 
{
    httpClient->GetStringAsync(uri);
}
catch 
{
    // Details in ex.Message and ex.HResult.   
}

// In C++/CX, the system resources used by httpClient object are released 
// when the object falls out of scope or by the destructor (delete operator).

应用通常使用 HttpClient 类下载并分析文本。 HTTP 服务器在 Content-Type 标头中指定的字符编码可能与 HTTP 响应正文的字符编码不匹配, (XML 文档中的 XML 编码,例如) 。 对文本使用 HttpClient 的一种方法是调用 GetStringAsync 方法,并将返回的字符串传递给文本分析器。 但是,如果 Content-Type 不是可表示为字符串的类型,则可能会导致错误。 将 HttpClient 与 XML 分析程序配合使用的可靠方法是调用 GetBufferAsync 方法并分析“xml>”<元素的缓冲区。 然后使用指定的字符编码 (“<xmlversion=”1.0“ encoding=”UTF-8“?>”,例如) 来分析 HTTP 响应正文。 对于其他文本格式,应用扫描 HTTP 响应正文的初始部分以确定使用的字符编码时,可以使用类似的方法。

注解

HttpClient 类实例充当发送 HTTP 请求和接收响应的会话。 HttpClient 实例是应用于该实例执行的所有请求的设置集合。 此外,每个 HttpClient 实例都使用自己的连接池,将其请求与其他 HttpClient 实例执行的请求隔离。

HttpClient 还充当类,用于更具体的 HTTP 客户端的筛选器。 例如,HttpClientFilter 提供特定于社交网络服务的其他方法 (GetFriends 方法,例如) 。

如果应用在 Windows.Web.Http 命名空间中使用 HttpClient 和相关类下载大量数据 (50 MB 或更多) ,则应用应流式传输这些下载内容,而不使用默认缓冲。 如果使用默认缓冲,客户端内存使用量会非常大,这可能会导致性能降低。

有关 C# 和 C++/WinRT 中演示如何使用 HttpClient 连接到 HTTP 服务器的示例代码,请参阅 HttpClient

有关 JavaScript 和 HTML 中演示如何使用 HttpClient 连接到 HTTP 服务器的示例代码,请参阅 使用 Windows.Web.Http 连接到 HTTP 服务器

版本历史记录

Windows 版本 SDK 版本 已添加值
1903 18362 TryDeleteAsync
1903 18362 TryGetAsync (Uri)
1903 18362 TryGetAsync (Uri,HttpCompletionOption)
1903 18362 TryGetBufferAsync
1903 18362 TryGetInputStreamAsync
1903 18362 TryGetStringAsync
1903 18362 TryPostAsync
1903 18362 TryPutAsync
1903 18362 TrySendRequestAsync (HttpRequestMessage)
1903 18362 TrySendRequestAsync (HttpRequestMessage,HttpCompletionOption)

构造函数

HttpClient()

初始化 HttpClient 类的新实例。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

HttpClient(IHttpFilter)

使用用于处理 HTTP 响应消息的特定筛选器初始化 HttpClient 类的新实例。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

属性

DefaultPrivacyAnnotation

发送 HTTP 请求,并从 URI 标识的资源接收 HTTP 响应。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

DefaultRequestHeaders

获取应随每个请求一起发送的标头的集合。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

方法

Close()

关闭 HttpClient 实例并释放分配的资源。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

DeleteAsync(Uri)

将 DELETE 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

Dispose()

执行与释放或重置非托管资源关联的应用程序定义的任务。

GetAsync(Uri)

以异步操作将 GET 请求发送给指定 URI。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

GetAsync(Uri, HttpCompletionOption)

使用 HTTP 完成选项作为异步操作将 GET 请求发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

GetBufferAsync(Uri)

将 GET 请求发送到指定的 URI,并在异步操作中将响应正文作为缓冲区返回。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

GetInputStreamAsync(Uri)

将 GET 请求发送到指定的 URI ,并在异步操作中将响应正文作为流返回。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

GetStringAsync(Uri)

将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

PostAsync(Uri, IHttpContent)

将 POST 请求作为异步操作发送到指定的 URI。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

PutAsync(Uri, IHttpContent)

以异步操作将 PUT 请求发送给指定 URI。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

SendRequestAsync(HttpRequestMessage)

以异步操作发送 HTTP 请求。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

SendRequestAsync(HttpRequestMessage, HttpCompletionOption)

使用 HTTP 完成选项作为异步操作发送 HTTP 请求。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

ToString()

返回表示当前 HttpClient 对象的字符串。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryDeleteAsync(Uri)

将 DELETE 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryGetAsync(Uri)

将 GET 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryGetAsync(Uri, HttpCompletionOption)

将 GET 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryGetBufferAsync(Uri)

将 GET 请求发送到指定的 URI,并在异步操作中以 HttpGetBufferResult 的形式返回响应正文,其值为 IBuffer。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryGetInputStreamAsync(Uri)

将 GET 请求发送到指定的 URI ,并在异步操作中将响应正文作为流返回。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryGetStringAsync(Uri)

将 GET 请求发送到指定 URI 并在异步操作中以字符串的形式返回响应正文。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryPostAsync(Uri, IHttpContent)

将 POST 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TryPutAsync(Uri, IHttpContent)

将 PUT 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TrySendRequestAsync(HttpRequestMessage)

将 HTTP 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

TrySendRequestAsync(HttpRequestMessage, HttpCompletionOption)

将包含完成选项的 HTTP 请求作为异步操作发送到指定的 URI 。 有关 HttpClient 类的编程指南和代码示例,请参阅 HttpClient 概念主题。

适用于

另请参阅