1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C# HEAD HTTPリクエストを送信する

Last updated at Posted at 2020-06-01

まえがき

URLからデータをダウンロードするとき、サーバーの負荷等を考えてデータが新しい場合だけダウンロードしたいことがあります。HTTPプロトコルではHEADメソッドのリクエストに対するレスポンスヘッダーが日付やETagといった情報を持ち、これらを利用して前述の目的を達成できます。

これらの情報はGETメソッドのリクエストに対するレスポンスヘッダーにも含まれますが、GETメソッドはデータそのものを取得するのでサーバーの負荷等は軽減できません。

C#における実装

C#ではSystem.Net.Http名前空間のHttpClientクラスを使用してURLにHEADメソッドのリクエストを送信できます。以下にサンプルコードを示します。

using System;
using System.Net.Http;

namespace ConsoleApp1
{
    class Program
    {
        // HttpClientのインスタンスは再利用すべきです。
        // https://docs.microsoft.com/ja-jp/dotnet/api/system.net.http.httpclient?view=netcore-3.1#remarks
        private static readonly HttpClient httpClient = new HttpClient();

        static void Main()
        {
            // HTTPリクエストを送信するURL
            // ここではQiitaのURLをお借りしています。
            var url = "https://qiita.com/";
            // URLに対するHTTP HEADリクエストメッセージを作成して送信
            // ここではResultを呼び出して同期処理にしています。
            var headMessage = new HttpRequestMessage(HttpMethod.Head, url);
            var response = httpClient.SendAsync(headMessage).Result;
            // ETagを出力する
            // nullの可能性があります。
            var headers = response.Headers;
            Console.WriteLine($"ETag:{headers.ETag?.Tag}");
        }
    }
}

参考

HTTPヘッダーやETagについてはMDNを参照ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?