【C#.NET解説】HttpClientクラスの基本機能と使い方をわかりやすく徹底解説 太陽神から学ぶHTTP通信講座

2024年11月20日水曜日

http通信

t f B! P L

名前空間 System.Net.Http

自己紹介

そなたたち、私の話を聞く覚悟はあるかな。私は太陽を司る力をもつ存在であり、通信の混沌を照らし、非同期通信を効率化する力を授けるのが私の役目だ。HTTP通信の基礎をわかりやすく説明していくとしよう。

基本機能

HttpClientは、HTTPリクエストを送信し、レスポンスを受け取るためのクラスだ。このクラスを使うことで、ウェブリソースとの通信が簡単に行えるようになる。以下に基本的なGETリクエストの例を示そう。

C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // HttpClientのインスタンスを作成
        using (HttpClient client = new HttpClient())
        {
            // GETリクエストを送信
            HttpResponseMessage response = await client.GetAsync("https://api.example.com/data");
            
            // レスポンス内容を文字列として取得
            string content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
    }
}

このようにして、簡単にウェブリソースとやり取りが可能になる。重要なのは「using」キーワードでHttpClientを囲むことで、リソース管理を適切に行える点だ。

よく使う場面と注意点

HttpClientはAPIからデータを取得したり、ウェブサービスと通信したりする際によく使われる。ただし、注意が必要な点もある。

例えば、HttpClientのインスタンスを使い回さずに新しく作成し続けると、リソースが枯渇する可能性がある。最初に書いてある例ではなく、以下のようにSingletonパターンを利用するのが望ましい。

C#
public static class HttpClientSingleton
{
    private static readonly HttpClient _client = new HttpClient();

    public static HttpClient Client => _client;
}

また、HttpClientではパブリックIPを直接取得することはできない。その場合は専用のサービスを利用する必要がある。次の見出しで例を示す。

パブリックIPを取得する方法

パブリックIPを取得するには、外部のIPサービスを利用することが多い。以下にその例を示す。

C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    // HttpClient定義
    private static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        // 外部IPサービスからパブリックIPを取得
        string url = "https://api.ipify.org?format=json";
        string result = await client.GetStringAsync(url);
        Console.WriteLine($"パブリックIP: {result}");
    }
}

このコードを実行することで、自身のパブリックIPが確認できる。

具体的な使い方

HttpClientはヘッダーの追加やリクエストのカスタマイズにも対応している。例えば、ユーザーエージェントを設定してデータを送信する方法を以下に示す。

C#
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    private static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        // ユーザーエージェントを追加
        client.DefaultRequestHeaders.Add("User-Agent", "MyCustomClient/1.0");

        // JSONデータを作成
        string json = "{\"name\":\"example\"}";
        StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

        // POSTリクエストを送信
        HttpResponseMessage response = await client.PostAsync("https://curl.se/", content);
        Console.WriteLine($"レスポンス: {response.StatusCode}");
    }
}

このように、HttpClientを使えば柔軟な通信が可能だ。

その他の便利なメソッド

HttpClientには他にも便利なメソッドが用意されている。

  • PutAsync
  • DeleteAsync
  • SendAsync
  • GetStreamAsync
  • GetByteArrayAsync

これらはまた違う時に説明しよう。

このブログを検索

QooQ