HttpClient クラス

定義

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 要求がある間は、スレッド セーフではないので、プロパティを変更しないでください。

次のメソッドはスレッド セーフです。

  1. CancelPendingRequests

  2. DeleteAsync

  3. GetAsync

  4. GetByteArrayAsync

  5. GetStreamAsync

  6. GetStringAsync

  7. PostAsync

  8. PutAsync

  9. SendAsync

  10. PatchAsync

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トランスポートHttpClientHttpMessageHandler構成することもできます。

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)

拡張メソッド

GetFromJsonAsync(HttpClient, String, Type, JsonSerializerOptions, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync(HttpClient, String, Type, JsonSerializerContext, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync(HttpClient, String, Type, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync(HttpClient, Uri, Type, JsonSerializerOptions, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync(HttpClient, Uri, Type, JsonSerializerContext, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync(HttpClient, Uri, Type, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, String, JsonSerializerOptions, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, String, JsonTypeInfo<TValue>, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, String, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, Uri, JsonSerializerOptions, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, Uri, JsonTypeInfo<TValue>, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

GetFromJsonAsync<TValue>(HttpClient, Uri, CancellationToken)

非同期操作で指定された URI に GET 要求を送信し、応答本文を JSON として逆シリアル化した結果の値を返します。

PatchAsJsonAsync<TValue>(HttpClient, String, TValue, JsonSerializerOptions, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PatchAsJsonAsync<TValue>(HttpClient, String, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PatchAsJsonAsync<TValue>(HttpClient, String, TValue, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PatchAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonSerializerOptions, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PatchAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PatchAsJsonAsync<TValue>(HttpClient, Uri, TValue, CancellationToken)

要求本文で JSON としてシリアル化された URI を含む value 指定された URI に PATCH 要求を送信します。

PostAsJsonAsync<TValue>(HttpClient, String, TValue, JsonSerializerOptions, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PostAsJsonAsync<TValue>(HttpClient, String, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PostAsJsonAsync<TValue>(HttpClient, String, TValue, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonSerializerOptions, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PostAsJsonAsync<TValue>(HttpClient, Uri, TValue, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる POST 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, String, TValue, JsonSerializerOptions, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, String, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, String, TValue, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonSerializerOptions, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, JsonTypeInfo<TValue>, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

PutAsJsonAsync<TValue>(HttpClient, Uri, TValue, CancellationToken)

要求本文に JSON としてシリアル化された value が含まれる PUT 要求を、指定された URI に送信します。

適用対象

こちらもご覧ください