HttpClient クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
URI によって識別されるリソースから HTTP 要求を送信し、HTTP 応答を受信するためのクラスを提供します。
public ref class HttpClient : System::Net::Http::HttpMessageInvoker
public class HttpClient : System.Net.Http.HttpMessageInvoker
type HttpClient = class
inherit HttpMessageInvoker
Public Class HttpClient
Inherits HttpMessageInvoker
- 継承
例
// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
static readonly HttpClient client = new HttpClient();
static async Task Main()
{
// Call asynchronous network methods in a try/catch block to handle exceptions.
try
{
HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
// Above three lines can be replaced with new helper method below
// string responseBody = await client.GetStringAsync(uri);
Console.WriteLine(responseBody);
}
catch(HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ",e.Message);
}
}
open System.Net.Http
// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
let client = new HttpClient()
let main =
task {
// Call asynchronous network methods in a try/catch block to handle exceptions.
try
let! response = client.GetAsync "http://www.contoso.com/"
response.EnsureSuccessStatusCode() |> ignore
let! responseBody = response.Content.ReadAsStringAsync()
// Above three lines can be replaced with new helper method below
// let! responseBody = client.GetStringAsync uri
printfn $"{responseBody}"
with
| :? HttpRequestException as e ->
printfn "\nException Caught!"
printfn $"Message :{e.Message} "
}
main.Wait()
' HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
Shared ReadOnly client As HttpClient = New HttpClient()
Private Shared Async Function Main() As Task
' Call asynchronous network methods in a try/catch block to handle exceptions.
Try
Dim response As HttpResponseMessage = Await client.GetAsync("http://www.contoso.com/")
response.EnsureSuccessStatusCode()
Dim responseBody As String = Await response.Content.ReadAsStringAsync()
' Above three lines can be replaced with new helper method below
' Dim responseBody As String = Await client.GetStringAsync(uri)
Console.WriteLine(responseBody)
Catch e As HttpRequestException
Console.WriteLine(Environment.NewLine & "Exception Caught!")
Console.WriteLine("Message :{0} ", e.Message)
End Try
End Function
前のコード例では、エントリ ポイントを async Task Main()
使用しています。 この機能には C# 7.1 以降が必要です。
注釈
クラス インスタンスは HttpClient 、HTTP 要求を送信するセッションとして機能します。 HttpClientインスタンスは、そのインスタンスによって実行されるすべての要求に適用される設定のコレクションです。 さらに、すべての HttpClient インスタンスは独自の接続プールを使用し、他 HttpClient のインスタンスによって実行される要求から要求を分離します。
派生クラスは、クラスの仮想メソッドをオーバーライドしないでください。 代わりに、要求前または要求後の HttpMessageHandler 処理を構成するために受け入れるコンストラクター オーバーロードを使用します。
既定では、.NET Frameworkと Mono では、HttpWebRequestサーバーに要求を送信するために使用されます。 この動作は、インスタンスをパラメーターとして受け取るコンストラクター オーバーロードの 1 つで別のチャネルを HttpMessageHandler 指定することで変更できます。 認証やキャッシュなどの機能が必要な場合は、 WebRequestHandler 設定を構成するために使用でき、インスタンスをコンストラクターに渡すことができます。 返されたハンドラーは、パラメーターを受け取る HttpMessageHandler コンストラクター オーバーロードのいずれかに渡すことができます。
名前空間でSystem.Net.Http使用HttpClientするアプリと関連するクラスが大量のデータ (50 メガバイト以上) をダウンロードする予定の場合、アプリはこれらのダウンロードをストリーミングし、既定のバッファリングを使用しないようにする必要があります。 既定のバッファリングを使用すると、クライアントのメモリ使用量が非常に大きくなり、パフォーマンスが大幅に低下する可能性があります。
未処理の HttpClient 要求がある間は、スレッド セーフではないので、プロパティを変更しないでください。
次のメソッドはスレッド セーフです。
HttpClient は、1 回インスタンス化され、アプリケーションの有効期間を通じて再利用されることを目的としています。 要求ごとに HttpClient クラスをインスタンス化すると、負荷の高い状態で使用可能なソケットの数が使い果たされます。 これにより、SocketException エラーが発生します。 HttpClient を正しく使用する例を次に示します。
public class GoodController : ApiController
{
private static readonly HttpClient HttpClient;
static GoodController()
{
HttpClient = new HttpClient();
}
}
type GoodController() =
inherit ApiController()
let httpClient = new HttpClient()
Public Class GoodController
Inherits ApiController
Private Shared ReadOnly HttpClient As HttpClient
Shared Sub New()
HttpClient = New HttpClient()
End Sub
End Class
これは HttpClient 、実行される各プラットフォームで使用できる下位レベルの機能をラップする高度な API です。
各プラットフォームで、 HttpClient 使用可能な最適なトランスポートの使用を試みます。
ホスト/ランタイム | バックエンド |
---|---|
Windows/.NET Framework | HttpWebRequest |
Windows/Mono | HttpWebRequest |
Windows/UWP | ネイティブWinHttpHandlerWindows (HTTP 2.0 対応) |
Windows/.NET Core 1.0-2.0 | ネイティブWinHttpHandlerWindows (HTTP 2.0 対応) |
Android/Xamarin | ビルド時に選択されます。 Androidのネイティブを使用するように使用するかHttpWebRequest、構成できますHttpURLConnection |
iOS、tvOS、watchOS/Xamarin | ビルド時に選択されます。 Apple NSUrlSession の (HttpWebRequestHTTP 2.0 対応) を使用するか、または使用するように構成できます |
macOS/Xamarin | ビルド時に選択されます。 Apple NSUrlSession の (HttpWebRequestHTTP 2.0 対応) を使用するか、または使用するように構成できます |
macOS/Mono | HttpWebRequest |
macOS/.NET Core 1.0-2.0 | libcurl -based HTTP トランスポート (HTTP 2.0 対応) |
Linux/Mono | HttpWebRequest |
Linux/.NET Core 1.0-2.0 | libcurl -based HTTP トランスポート (HTTP 2.0 対応) |
.NET Core 2.1 以降 | System.Net.Http.SocketsHttpHandler |
また、ユーザーは、次のコマンドを受け取るコンストラクターを呼び出すことによって、特定のHttpClientトランスポートHttpClientをHttpMessageHandler構成することもできます。
HttpClient と .NET Core
.NET Core 2.1 以降では、クラスの代わりに、System.Net.Http.SocketsHttpHandler次のようなHttpClient
上位レベルの HttpClientHandler
HTTP ネットワーク クラスで使用される実装が提供されます。 この使用 SocketsHttpHandler には、次のような多くの利点があります。
- 以前の実装と比較して、パフォーマンスが大幅に向上しています。
- プラットフォームの依存関係が排除され、デプロイとサービスが簡素化されます。 たとえば、
libcurl
macOS用の .NET Core と Linux 用の .NET Core への依存関係はなくなりました。 - すべての .NET プラットフォームで一貫した動作。
この変更が望ましくない場合でも、Windows NuGetパッケージを参照し、手動でコンストラクターにHttpClient
渡すことによって使用WinHttpHandlerできます。
実行時の構成オプションを使用して動作を構成する
動作の特定の HttpClient側面は、 実行時の構成オプションを使用してカスタマイズできます。 ただし、これらのスイッチの動作は.NET バージョンによって異なります。 たとえば、.NET Core 2.1 から 3.1 では、既定で使用するかどうかを SocketsHttpHandler 構成できますが、そのオプションは .NET 5 以降では使用できなくなります。
コンストラクター
HttpClient() |
このインスタンスが破棄されたときに破棄される HttpClientHandler を使用して、HttpClient クラスの新しいインスタンスを初期化します。 |
HttpClient(HttpMessageHandler) |
指定したハンドラーを使用して、HttpClient クラスの新しいインスタンスを初期化します。 このインスタンスが破棄されたときに、ハンドラーは破棄されます。 |
HttpClient(HttpMessageHandler, Boolean) |
提供されたハンドラーを使用して、HttpClient クラスの新しいインスタンスを初期化し、このインスタンスが破棄されるときにそのハンドラーを破棄するかどうかを指定します。 |
プロパティ
BaseAddress |
要求を送信するときに使用する、インターネット リソースの Uniform Resource Identifier (URI) のベース アドレスを取得または設定します。 |
DefaultProxy |
グローバル HTTP プロキシを取得または設定します。 |
DefaultRequestHeaders |
各要求と一緒に送信する必要があるヘッダーを取得します。 |
DefaultRequestVersion |
この HttpClient インスタンスによって行われる後続の要求で使用される、既定の HTTP バージョンを取得または設定します。 |
DefaultVersionPolicy |
GetAsync(String) や PostAsync(String, HttpContent) などの便利なメソッドで暗黙的に作成される要求の既定のバージョン ポリシーを取得または設定します。 |
MaxResponseContentBufferSize |
応答の内容を読み取るときにバッファーに格納できる最大バイト数を取得または設定します。 |
Timeout |
要求がタイムアウトするまで待機する期間を取得または設定します。 |
メソッド
CancelPendingRequests() |
このインスタンスの保留中の要求をすべてキャンセルします。 |
DeleteAsync(String) |
指定された URI に DELETE 要求を非同期操作として送信します。 |
DeleteAsync(String, CancellationToken) |
非同期操作としてキャンセル トークンを使用して削除要求を指定された Uri に送信します。 |
DeleteAsync(Uri) |
指定された URI に DELETE 要求を非同期操作として送信します。 |
DeleteAsync(Uri, CancellationToken) |
非同期操作としてキャンセル トークンを使用して削除要求を指定された Uri に送信します。 |
Dispose() |
HttpMessageInvoker が使用しているアンマネージド リソースを解放し、マネージド リソースを破棄します。 (継承元 HttpMessageInvoker) |
Dispose(Boolean) |
HttpClient が使用しているアンマネージド リソースを解放します。オプションとして、マネージド リソースを破棄することもできます。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetAsync(String) |
指定された URI に GET 要求を非同期操作として送信します。 |
GetAsync(String, CancellationToken) |
非同期操作としてキャンセル トークンを使用して GET 要求を指定された Uri に送信します。 |
GetAsync(String, HttpCompletionOption) |
非同期操作としてHTTP 完了オプションを使用して GET 要求を指定された Uri に送信します。 |
GetAsync(String, HttpCompletionOption, CancellationToken) |
非同期操作としてキャンセル トークンおよび HTTP 完了オプションを使用して GET 要求を指定された Uri に送信します。 |
GetAsync(Uri) |
指定された URI に GET 要求を非同期操作として送信します。 |
GetAsync(Uri, CancellationToken) |
非同期操作としてキャンセル トークンを使用して GET 要求を指定された Uri に送信します。 |
GetAsync(Uri, HttpCompletionOption) |
非同期操作としてHTTP 完了オプションを使用して GET 要求を指定された Uri に送信します。 |
GetAsync(Uri, HttpCompletionOption, CancellationToken) |
非同期操作としてキャンセル トークンおよび HTTP 完了オプションを使用して GET 要求を指定された Uri に送信します。 |
GetByteArrayAsync(String) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をバイト配列として返します。 |
GetByteArrayAsync(String, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をバイト配列として返します。 |
GetByteArrayAsync(Uri) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をバイト配列として返します。 |
GetByteArrayAsync(Uri, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をバイト配列として返します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetStreamAsync(String) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をストリームとして返します。 |
GetStreamAsync(String, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をストリームとして返します。 |
GetStreamAsync(Uri) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をストリームとして返します。 |
GetStreamAsync(Uri, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体をストリームとして返します。 |
GetStringAsync(String) |
指定 URI に GET 要求を送信し、非同期操作で応答本体を文字列として返します。 |
GetStringAsync(String, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体を文字列として返します。 |
GetStringAsync(Uri) |
指定 URI に GET 要求を送信し、非同期操作で応答本体を文字列として返します。 |
GetStringAsync(Uri, CancellationToken) |
指定 URI に GET 要求を送信し、非同期操作で応答本体を文字列として返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
PatchAsync(String, HttpContent) |
文字列として指定されている URI に PATCH 要求を非同期操作として送信します。 |
PatchAsync(String, HttpContent, CancellationToken) |
文字列として表現されている URI に PATCH 要求をキャンセル トークン付きで非同期操作として送信します。 |
PatchAsync(Uri, HttpContent) |
非同期操作として PATCH 要求を送信します。 |
PatchAsync(Uri, HttpContent, CancellationToken) |
PATCH 要求をキャンセル トークンと共に非同期操作として送信します。 |
PostAsync(String, HttpContent) |
指定された URI に POST 要求を非同期操作として送信します。 |
PostAsync(String, HttpContent, CancellationToken) |
POST 要求をキャンセル トークンとともに非同期操作として送信します。 |
PostAsync(Uri, HttpContent) |
指定された URI に POST 要求を非同期操作として送信します。 |
PostAsync(Uri, HttpContent, CancellationToken) |
POST 要求をキャンセル トークンとともに非同期操作として送信します。 |
PutAsync(String, HttpContent) |
指定された URI に PUT 要求を非同期操作として送信します。 |
PutAsync(String, HttpContent, CancellationToken) |
PUT 要求をとキャンセル トークンと共に非同期操作として送信します。 |
PutAsync(Uri, HttpContent) |
指定された URI に PUT 要求を非同期操作として送信します。 |
PutAsync(Uri, HttpContent, CancellationToken) |
PUT 要求をとキャンセル トークンと共に非同期操作として送信します。 |
Send(HttpRequestMessage) |
指定した要求を使用して HTTP 要求を送信します。 |
Send(HttpRequestMessage, CancellationToken) |
指定した要求とキャンセル トークンを使用して HTTP 要求を送信します。 |
Send(HttpRequestMessage, CancellationToken) |
指定した要求とキャンセル トークンを使用して HTTP 要求を送信します。 (継承元 HttpMessageInvoker) |
Send(HttpRequestMessage, HttpCompletionOption) |
HTTP 要求を送信します。 |
Send(HttpRequestMessage, HttpCompletionOption, CancellationToken) |
指定した要求、完了オプション、およびキャンセル トークンを使用して HTTP 要求を送信します。 |
SendAsync(HttpRequestMessage) |
非同期操作として HTTP 要求を送信します。 |
SendAsync(HttpRequestMessage, CancellationToken) |
非同期操作として HTTP 要求を送信します。 |
SendAsync(HttpRequestMessage, HttpCompletionOption) |
非同期操作として HTTP 要求を送信します。 |
SendAsync(HttpRequestMessage, HttpCompletionOption, CancellationToken) |
非同期操作として HTTP 要求を送信します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |