HttpClientへのHttpヘッダーの追加


158

すべて:

Webサービスにリクエストを送信する前に、HttpClientにhttpヘッダーを追加する必要があります。(HttpClientですべての将来の要求とは対照的に)個々の要求に対してどうすればよいですか?これが可能かどうかはわかりません。

var client = new HttpClient();
var task =
    client.GetAsync("http://www.someURI.com")
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

回答:


245

を作成しHttpRequestMessage、メソッドをGETに設定し、ヘッダーを設定してから、のSendAsync代わりに使用しますGetAsync

var client = new HttpClient();
var request = new HttpRequestMessage() {
    RequestUri = new Uri("http://www.someURI.com"),
    Method = HttpMethod.Get,
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
var task = client.SendAsync(request)
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

2
ありがとう、Darrel!HttpClientあなたがこれをすることができるのを見るまで、私はがっかりしました。
サム

23
@タロンそれが406の意味です。クライアントが、サーバーがサポートしていないメディアタイプを要求しました。取得するメディアの種類を気にしない場合は、要求しないでください。OPは、リクエストにヘッダーを追加する方法を単に尋ねていました。私はランダムな例を選んだだけです。
Darrel Miller

15
これらの日、あなたはおそらくしたいvar response = await client.SendAsyncの代わりに、ContinueWithtask.Wait()
マイケル・パーカー

1
@MichaelParker確かに。
Darrel Miller

1
最高のパフォーマンスを得るには、このようなHTTPクライアントをインスタンス化しないでください。あなたはここにこれについての詳細読むことができますstackoverflow.com/a/15708633/1406930を
ScottBurfieldMills

16

すべてのリクエストで同じヘッダーにする、各リクエストの後にクライアントを破棄する場合は、DefaultRequestHeaders.Addオプションを使用できます。

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");      

3
これにより、そのHttpClientによって今後送信されるすべてのメッセージにヘッダーが追加されると思います。これは、OPのポイントと矛盾します。「(HttpClientですべての将来のリクエストに対してではなく)個々のリクエストに対してどうすればよいですか?」 HttpClientインスタンスは、一度作成して何度も使用するように設計されています。
Flydog57

リクエストにカスタムヘッダーを設定するには、httpサーバーに送信するためにhttpclientに渡す前に、カスタムヘッダーを使用してリクエストを作成します。デフォルトのヘッダーはhttpclientで設定され、すべてのリクエストでサーバーに送信されます。
ジンバ

0

リクエストにカスタムヘッダーを設定するには、httpサーバーに送信するためにhttpclientに渡す前に、カスタムヘッダーを使用してリクエストを作成します。例えば:

HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
  .setUri(someURL)
  .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
  .build();
client.execute(request);

デフォルトヘッダーはSET ON HTTPCLIENTで、すべてのリクエストでサーバーに送信されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.