C#에서 CURL 호출하기

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. HttpWebRequest 또는 HttpWebResponse를 사용하여 C#에서 CURL 호출 만들기
  2. WebClient를 사용하여 C#에서 CURL 호출 만들기
  3. HttpClient를 사용하여 C#에서 CURL 호출 만들기
  4. 결론
C#에서 CURL 호출하기

클라이언트 URL(cURL)은 C#의 API 문서에 대한 사실상의 표준입니다. 한 형식에서 다른 형식으로 변환해야 합니다.

따라서 JSON을 C# 클래스로 변환하는 것은 상당히 인기 있는 접근 방식입니다. 웹 또는 호스트의 응답 개체도 C# 클래스로 변환되어 개발자에게 더 친숙해집니다.

이 문서에서는 C#에서 cURL 호출을 수행하는 세 가지 접근 방식에 대해 설명합니다.

C#에서 cURL을 사용하여 보낼 위치와 데이터를 지정하여 서버와의 통신을 만듭니다. URL은 모든 cURL 명령을 따르기 때문에 항상 일부 데이터를 검색하고 cURL에 대한 HTML 소스를 반환합니다.

cURL은 휴대성이 뛰어나고 거의 모든 OS 및 연결된 장치와 호환됩니다. C#에서 cURL은 끝점을 테스트하는 데 유용하며 전송 또는 수신된 내용에 대한 세부 정보를 제공하므로 오류 로깅 및 디버깅에 좋습니다.

cURL은 libcurl을 사용하므로 libcurl과 동일한 범위의 일반 인터넷 프로토콜을 지원합니다.

HttpWebRequest 또는 HttpWebResponse를 사용하여 C#에서 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는 C#에서 cURL 호출을 만들기 위해 WebResponse 클래스의 속성 및 메서드의 HTTP 관련 사용자를 지원합니다. HttpWebResponse 클래스의 인스턴스를 만들고 Stream.Close 또는 HttpWebResponse.Close 메서드를 호출하여 응답을 닫고 응답이 성공적으로 수신되면 재사용을 위해 연결을 해제합니다.

WebClient를 사용하여 C#에서 CURL 호출 만들기

WebClient 클래스는 URI로 식별되는 로컬 또는 인터넷 리소스를 통해 데이터 변환 또는 수신 방법을 제공합니다. WebRequest 클래스를 사용하여 리소스에 대한 액세스를 제공합니다.

WebClient는 C#에서 cURL 호출을 만드는 가장 일반적인 작업을 단순화하기 위해 HttpWebRequest 위에 구축된 상위 수준 추상화입니다.

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를 사용하여 요청을 하고 반환을 요청에 따라 HttpWebRequest, FileWebRequest 또는 FtpWebRequest로 변환할 수 있습니다.

URI로 식별되는 리소스에서 데이터를 보내고 받는 일반적인 작업을 제공하여 cURL 호출을 만드는 이상적인 방법 중 하나입니다.

HttpClient를 사용하여 C#에서 CURL 호출 만들기

HttpClient 클래스는 URI로 식별되는 리소스에서 HTTP 요청을 보내고 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 호출을 만드는 세 가지 유용한 방법을 설명했습니다. 이제 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