C# 웹페이지 읽기 : 웹페이지를 문자열로 가져오는 여러가지 방법

C#은 강력한 프로그래밍 언어로, 웹 페이지를 읽고 데이터를 가져오는 데에도 효과적으로 사용됩니다. 이 글에서는 C#을 사용하여 웹 페이지를 읽는 여러가지 방법에 대해 알아보겠습니다. HttpClient, Flurl.Http 및 RestSharp을 사용하여 각각의 방법을 살펴보겠습니다.

 중요

새 개발에는 HttpWebRequest 는 사용하지  않는 것이 좋습니다. 대신System.Net.Http.HttpClient 클래스입니다.

예전에는 HttpWebRequest 를 사용했었는데 현재 MS 에서 사용하지 말라고 권고하고 있습니다. 

이 튜토리얼의 예제에서는 작은 웹 페이지 https://harostudio.co.kr 에서 웹 페이지를 읽습니다.

HttpClient를 사용하여 웹 페이지 읽기

HttpClient는 URI로 식별된 리소스에서 HTTP 요청을 보내고 HTTP 응답을 수신하는 데 사용되는 기본 클래스를 제공합니다.

static async Task Main(string[] args)
{
    using var client = new HttpClient();
    client.DefaultRequestHeaders.Add("User-Agent", "C# console program");

    var content = await client.GetStringAsync("https://harostudio.co.kr");

    Console.WriteLine(content);
}

이 코드 예제는 HttpClient를 사용하여 웹 페이지를 비동기적으로 가져옵니다. HttpClient는 .NET에서 웹 페이지를 가져오는 현대적인 방법입니다.

var content = await client.GetStringAsync("https://harostudio.co.kr");

await 연산자는 awaitable을 인수로 취하여 awaitable이 이미 완료되었는지 확인합니다. awaitable이 이미 완료된 경우 메서드가 계속 실행됩니다. GetStringAsync는 비동기 작업으로 웹페이지를 문자열로 읽습니다.

Flurl.Http를 사용하여 웹 페이지 읽기

Flurl.Http는 C# 언어를 위한 유창하고 이식 가능하며 테스트 가능한 HTTP 서드파티 클라이언트 라이브러리입니다.

Flurl.Http 패키지를 설치합니다.

C# 웹페이지 읽기 : 웹페이지를 문자열로 가져오는 여러가지 방법

Flurl.Http는 Fluent API를 통해 HTTP 요청을 구성하고 보내는 방법을 제공합니다. 이를 통해 개발자들은 직관적이고 가독성이 좋은 코드를 작성할 수 있습니다. 예를 들어, 다음과 같이 간단한 GET 요청을 보낼 수 있습니다.

static async Task Main(string[] args)
{
    string result = await "https://harostudio.co.kr".GetStringAsync();
    Console.WriteLine(result);
}

이 예제는 웹 페이지를 읽고 내용을 터미널에 출력합니다.

string result = await "https://harostudio.co.kr".GetStringAsync();

await 연산자는 비동기 메서드에서 작업에 대해 사용되며 기다리는 동안 메서드의 실행을 일시 중지합니다. 작업은 진행 중인 작업을 나타냅니다. GetStringAsync 확장 메서드를 사용하여 데이터를 검색합니다.

Flurl.Http를 사용하여 간단한 GET 요청으로 Json Data를 보내는 예제를 살펴보겠습니다.

또한 Flurl 은 Json 데이터 또한 쉽게 읽어올 수 있습니다.
Browser 에서 다음과 같은 데이터가 있다고 가정했을때

C# 웹페이지 읽기 : 웹페이지를 문자열로 가져오는 여러가지 방법

Flurl.Http를 사용하여 간단한 GET 요청으로 Json Data를 보내는 예제를 살펴보겠습니다.

using Flurl.Http;
using System.Threading.Tasks;

public class Employee
{
    public int employeeId { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
    public int age { get; set; }
}

class Program
{
    static async Task Main(string[] args)
    {
        var result = await "http://localhost:5000/api/Employees".
            GetJsonAsync<List<Employee>>();
        foreach (var Emp in result)
        {
            Console.WriteLine("{0}\t{1}\t{2}\t{3}",
                Emp.employeeId, Emp.firstName, Emp.lastName, Emp.age);
        }       
    }
}

출력은 다음과 같습니다.

1       Haro    - Studio -      48
2       하로    스튜디오        49
var result = await "http://localhost:5000/api/Employees".GetJsonAsync<List<Employee>>();

GetJsonAsync 구문이 Json을 얻어오고 역직렬화까지 동시에 수행하는 구문입니다.

Json 형식의 웹 페이지에서 데이터를 가져와서 콘솔에 출력하는 간단한 예제를 살펴 보았습니다.

RestSharp를 사용하여 웹 페이지 읽기

RestSharp는 .NET을 위한 간단한 REST 및 HTTP API 클라이언트입니다. 이것은 서드파티 라이브러리입니다.

RestSharp 패키지를 설치합니다.

$ dotnet add package RestSharp
C# 웹페이지 읽기 : 웹페이지를 문자열로 가져오는 여러가지 방법
using RestSharp;

var client = new RestClient("https://harostudio.co.kr");
var request = new RestRequest();

var res = await client.ExecuteGetAsync(request);

Console.WriteLine(res.Content);

이 코드 예제는 RestSharp 라이브러리를 사용하여 웹 페이지의 내용을 가져옵니다. 웹 페이지는 비동기적으로 다운로드됩니다.

var client = new RestClient("https://harostudio.co.kr");

RestClient 클래스를 사용하여 REST 클라이언트를 생성합니다.

var request = new RestRequest();

RestRequest를 사용하여 요청을 생성합니다. 기본적으로 GET 요청입니다.

var res = await client.ExecuteGetAsync(request);

ExecuteGetAsync 메서드를 사용하여 요청을 비동기적으로 실행합니다.

결론

C#을 사용하여 웹 페이지를 읽는 방법에 대해 알아보았습니다. HttpClient, Flurl.Http 및 RestSharp을 사용하여 각각의 방법에 대해 살펴보았고, 각 방법마다 간단한 예제 코드를 제공했습니다. 이러한 방법을 사용하면 C#으로 웹 페이지를 효과적으로 읽고 데이터를 가져올 수 있습니다.

Leave a Comment