John's 개발자의 관심노트

C# HTTP Get Method 사용방법 본문

코드모음/C#

C# HTTP Get Method 사용방법

John-Co 2023. 8. 9. 11:03

HTTP 프로토콜을 기반으로 특정 서버의 데이터를 가져오는 코드에 대해 알아보겠습니다.

 

오늘 사용할 웹 서버 주소로는 "https://cdn.pixabay.com/photo/2023/06/25/08/46/woman-8086721_640.jpg" 를 사용할 예정이고, 해당 URL 은 구글 검색으로 찾아온 이미지 URL 주소 입니다.

 

해당 URL 에 접속하시면, 어떤 한 여성분의 사진이 불려집니다. 이제 마우스로 클릭해서가 아닌 C# Code 에서 불러오는 방법에 대해 알아보겠습니다.

 

Image Data 를 담는 공간으로는 Mat Type 변수를 사용하여, 아래 코드를 사용하시고자 한다면, Nuget Package 에서 "OpenCvSharp4" 패키지를 설치하고 실행해 주세요.

 

아래 코드는 HttpWebRequest 객체를 생성하고, 위에서 오늘 사용할 웹 서버 주소 URL 을 입력해서 Connection 을 진행합니다. KeepAlive 기능은 False 로 해주셔야, 반복적으로 Resource 를 가져올 수 있는 것으로 보여집니다. True 상태로 계속 "GET" Method 를 호출하니 Exception 이 발생하더군요. 조금 더 자세하게 공부를 해서 업데이트 해두도록 하겠습니다.

string url = "https://cdn.pixabay.com/photo/2023/06/25/08/46/woman-8086721_640.jpg";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.KeepAlive = false;
request.Method = "GET";
request.Timeout = 1 * 1000;

Response 를 객체에 담고, 해당 객체를 통해 Body 부분에 실려온 Data 를 Buffer 에 담습니다. 디버그 모드로 확인해보시면 "FFD8 ~ FFD9" 의 데이터가 실려 있을거에요. 해당 데이터를 모두 담고, Mat.FromImageData() 를 사용해 Raw Type 의 Image 데이터를 담아냅니다.

List<byte> data = new List<byte>();

using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
    HttpStatusCode status = resp.StatusCode;
    Console.WriteLine(status);

    using (Stream stream = resp.GetResponseStream())
    {
        int count = 0;
        var buff = new byte[1024];

        do
        {
            count = stream.Read(buff, 0, buff.Length);
            for (int i = 0; i < count; i++)
            {
                data.Add(buff[i]);
            }
        } while (count > 0);

        result = Mat.FromImageData(data.ToArray(), ImreadModes.Color);
    }
}

 

 

반응형