C# で CURL 呼び出しを行う

Syed Hassan Sabeeh Kazmi 2023年10月12日
  1. C#HttpWebRequest または HttpWebResponse を使用して CURL 呼び出しを行う
  2. C#WebClient を使用して CURL 呼び出しを行う
  3. C#HttpClient を使用して CURL 呼び出しを行う
  4. まとめ
C# で CURL 呼び出しを行う

クライアント URL (cURL) は、C# の API ドキュメントのデファクト スタンダードです。 ある形式から別の形式への変換が必要です。

したがって、JSON を C# クラスに変換することは、かなり一般的なアプローチです。 Web またはホストからの応答オブジェクトも C# クラスに変換され、開発者にとってより使いやすくなっています。

この記事では、C# で cURL 呼び出しを行うための 3つの方法について説明します。

C# で cURL を使用して送信する場所とデータを指定して、サーバーとの通信を作成します。 URL はすべての cURL コマンドに従うため、常に何らかのデータを取得し、cURL の HTML ソースを返します。

cURL は移植性が高く、ほぼすべての OS および接続されたデバイスと互換性があります。 C# では、cURL はエンドポイントのテストに役立ち、送受信された内容の正確な詳細を提供します。これは、エラー ログとデバッグに適しています。

cURL は libcurl を使用するため、libcurl と同じ範囲の一般的なインターネット プロトコルをサポートします。

C#HttpWebRequest または HttpWebResponse を使用して CURL 呼び出しを行う

HttpWebRequest クラスは、WebRequest で定義されたメソッドとプロパティをサポートします。 その追加のプロパティとメソッドにより、ユーザーは HTTP を使用してサーバーと直接対話できます。

WebRequest.Create メソッドを使用して、新しい HttpWebRequest オブジェクトを初期化します。 GetResponse メソッドを使用して、RequestUri プロパティで指定されたリソースに同期リクエストを送信します。

応答オブジェクトを含む HttpWebResponse を返します。 クローズド レスポンス オブジェクトの場合、残りのデータは強化されます。

キープアライブまたはパイプライン化されたリクエストです。 短い間隔で少量のデータのみを受信する必要があります。 C# では、.NET フレームワークに新しいセキュリティ機能が含まれています。これは、既定でより安全な動作を取得する接続およびターゲットの安全でない暗号およびハッシュ アルゴリズムをブロックします。

// create a separate class

// Include the `System.Net` and `System.IO` into your C# project and install NuGet `Newtonsoft.Json`
// package before executing the C# code.
using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace cURLCall {
  public class gta_allCustomersResponse {
    public static void gta_AllCustomers() {
      var httpWebRequest = (HttpWebRequest)WebRequest.Create(
          "https://api.somewhere.com/desk/external_api/v1/customers.json");
      httpWebRequest.ContentType = "application/json";
      httpWebRequest.Accept = "*/*";
      httpWebRequest.Method = "GET";
      httpWebRequest.Headers.Add("Authorization", "Basic reallylongstring");

      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
        gta_allCustomersResponse answer =
            JsonConvert.DeserializeObject<gta_allCustomersResponse>(streamReader.ReadToEnd());
        // return answer;
      }
    }
  }
}

gta_allCustomersResponse クラスの gta_AllCustomers() メソッドをメイン フォームに呼び出して、cURL 呼び出しを行います。

using static cURLCall.gta_allCustomersResponse;

gta_AllCustomers();

HttpWebResponse は、WebResponse クラスのプロパティとメソッドの HTTP 固有のユーザーをサポートして、C# で cURL 呼び出しを行います。 HttpWebResponse クラスのインスタンスを作成し、Stream.Close または HttpWebResponse.Close メソッドを呼び出して応答を閉じ、応答が正常に受信されたら再利用するために接続を解放します。

C#WebClient を使用して CURL 呼び出しを行う

WebClient クラスは、URI で識別されるローカルまたはインターネット リソースを介して、データ変換または受信メソッドを提供します。 WebRequest クラスを使用して、リソースへのアクセスを提供します。

WebClient は、HttpWebRequest の上に構築された高レベルの抽象化であり、C# で cURL 呼び出しを行うための最も一般的なタスクを簡素化します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using Newtonsoft.Json;

namespace cURLCall {
  public static class StaticItems {
    public static string EndPoint = "http://localhost:8088/api/";
  }

  public class CityInfo {
    public int CityID { get; set; }
    public int CountryID { get; set; }
    public int StateID { get; set; }
    public string Name { get; set; }
    public decimal Latitude { get; set; }
    public decimal Longitude { get; set; }
  }

  public class receiveData {
    public List<CityInfo> CityGet() {
      try {
        using (WebClient webClient = new WebClient()) {
          webClient.BaseAddress = StaticItems.EndPoint;
          var json = webClient.DownloadString("City/CityGetForDDL");
          var list = JsonConvert.DeserializeObject<List<CityInfo>>(json);
          return list.ToList();
        }
      } catch (WebException ex) {
        throw ex;
      }
    }
  }
  public class ReturnMessageInfo {
    public ReturnMessageInfo CitySave(CityInfo city) {
      ReturnMessageInfo result = new ReturnMessageInfo();
      try {
        using (WebClient webClient = new WebClient()) {
          webClient.BaseAddress = StaticItems.EndPoint;
          var url = "City/CityAddUpdate";
          webClient.Headers.Add(
              "user-agent",
              "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
          webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
          string data = JsonConvert.SerializeObject(city);
          var response = webClient.UploadString(url, data);
          result = JsonConvert.DeserializeObject<ReturnMessageInfo>(response);
          return result;
        }
      } catch (Exception ex) {
        throw ex;
      }
    }
  }
}

FileWebRequestFtpWebRequest のようなクラスは WebRequest を継承しています。 一般に、WebRequest を使用してリクエストを作成し、リクエストに応じて、リターンを HttpWebRequestFileWebRequest、または FtpWebRequest に変換できます。

これは、URI によって識別されるリソースからデータを送受信するための一般的な操作を提供することにより、cURL 呼び出しを行う理想的な方法の 1つです。

C#HttpClient を使用して CURL 呼び出しを行う

HttpClient クラスは、HTTP リクエストを送信し、URI によって識別されるリソースから HTTP レスポンスを受信するメソッドを提供する他のどのクラスよりもはるかに優れているように設計されています。 そのインスタンスは、HTTP リクエストを送信するセッションとして機能するすべてのリクエストに適用される設定のコレクションです。

さらに、すべての HttpClient インスタンスは、cURL 呼び出しごとに接続プールを使用します。

C# では、HttpClient は一度インスタンス化され、アプリケーションの存続期間を通じて再利用されることを意図しています。 上位レベルの API として、HttpClient は利用可能な各プラットフォーム (それが実行されるプラットフォームを含む) で下位レベルの機能をラップします。

さらに、このクラスの動作はカスタマイズ可能であり、特に HTTP 要求のパフォーマンスを大幅に向上させることができます。 .NET のランタイム構成オプションは、HttpClient を構成してその動作をカスタマイズできます。

using System;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using Newtonsoft.Json;

class UserInfo {
  public string UserName { get; set; }
  public string Email { get; set; }

  public override string ToString() {
    return $"{UserName}: {Email}";
  }
}

class cURLCall {
  static async Task Main(string[] args) {
    var user = new UserInfo();
    user.UserName = "My Name";
    user.Email = "myname4321@exp.com";

    var json = JsonConvert.SerializeObject(person);
    var data = new StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;

    // processed user info thorugh HttpClient
    Console.WriteLine(result);
  }
}

HttpClient クラスは、さまざまな応答タイプの処理をより適切にサポートし、前述のオプションよりも非同期操作をより適切にサポートします。

まとめ

この記事では、C# で cURL 呼び出しを行うための 3つの便利な方法を説明しました。 C# コードを使用して cURL 呼び出しを行い、エンドポイントをテストして C# アプリケーションをトラブルシューティングできるようになりました。

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub