한줄 메모

부자는 돈을 써서 시간을 아끼지만 가난한 사람은 시간을 써서 돈을 아낀다

vb.net

IT HUB를 찾아주셔서 감사합니다.

WinHttp [업데이트중] HttpWebRequest처럼 HTTP 요청을 보낼 수 있고, 더 다양한 기능이나 사용 편의성을 제공하는 .NE…

페이지 정보

profile_image
작성자 하나를하더라도최선을
댓글 0건 조회 12회 작성일 25-07-02 19:00

본문


1. HttpClient (System.Net.Http)

  • 최신 .NET에서 권장되는 기본 HTTP 라이브러리

  • 비동기/동기, 쿠키, 헤더, 인증, JSON 직렬화 등 지원

  • TLS 1.2 기본 지원, HttpWebRequest보다 사용 간결

Dim client As New HttpClient()

Dim response = Await client.GetAsync("https://example.com")

Dim content = Await response.Content.ReadAsStringAsync()

 

2. RestSharp

  • 인기 있는 .NET용 REST API 클라이언트 라이브러리

  • HttpWebRequest보다 간단하게 REST 요청 구성 가능

  • JSON 직렬화, 인증, 쿠키 자동 처리 기능 내장

Dim client = New RestClient("https://example.com")

Dim request = New RestRequest("endpoint", Method.GET)

request.AddHeader("User-Agent", "...")

Dim response = client.Execute(request)

NuGet: Install-Package RestSharp

 

3. Flurl.Http

  • HttpClient를 래핑한 간결한 문법 제공

  • 체이닝 방식으로 URL, 파라미터, 헤더 등 쉽게 구성 가능

 Dim json = Await "https://example.com"

    .WithHeader("User-Agent", "...")

    .GetStringAsync()

 


NuGet: Install-Package Flurl.Http


4. WebClient (구버전)

  • 매우 간단한 동기식 요청 도구

  • 쿠키, 헤더 처리 제한적 / 기본 .NET 포함

Dim client As New WebClient()

Dim content As String = client.DownloadString("https://example.com")


 

5. Edge.js + Node.js (고급)

  • VB.NET에서 Node.js의 axios 또는 puppeteer 호출

  • 매우 고급 상황에서 브라우저 수준 우회 요청 가능


목적추천 라이브러리
고성능 REST APIRestSharpFlurl
브라우저처럼 세밀 제어curl or puppeteer
비동기 / 표준 HTTP 지원HttpClient
단순 동기 요청WebClientHttpWebRequest




CreateObject("MSXML2.ServerXMLHTTP.6.0") 는 크롤링에 사용할 수 없을 것 같다.


    Private Function xWinHttp(Optional mesode As String = "GET", Optional URL As String = Nothing, Optional Hadders As String = Nothing, Optional enQuery As String = ""As Object
        Dim T As String = "", O As Object
        Do
            If Not isWork Then Return Nothing
            If isDelay AndAlso delayValue > 0 Then
                program1472.Functions.Time.Delay(delayValue)
            End If
            Dim agent As String = userAgent()
            Try
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
 
                Static xhr As Object = CreateObject("MSXML2.ServerXMLHTTP.6.0")
                xhr.Open(mesode.ToUpper(), URL, False)
                xhr.setOption(213056)
                xhr.setRequestHeader("User-Agent", agent)
                xhr.setRequestHeader("Accept""application/json, text/plain, */*")
                xhr.setRequestHeader("Accept-Language""ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4")
                xhr.setRequestHeader("Referer", $"https://map.naver.com/p/search/{enQuery}?c=15.00%2C0%2C0%2C0%2Cdh")
                xhr.setRequestHeader("Cache-Control""no-cache")
                xhr.setRequestHeader("Pragma""no-cache")
                xhr.setRequestHeader("Expires""Sat, 01 Jan 2000 00:00:00 GMT")
                xhr.setRequestHeader("Connection""keep-alive")
                xhr.setRequestHeader("Sec-Fetch-Dest""empty")
                xhr.setRequestHeader("Sec-Fetch-Mode""cors")
                xhr.setRequestHeader("Sec-Fetch-Site""same-origin")
                xhr.setRequestHeader("TE""trailers")
                xhr.send
                T = xhr.responseText
            Catch ex As Exception
                T = ""
                userAgentOriginalList.Remove(agent)
                LOG(ex.Message)
                Threading.Thread.Sleep(1200) : Application.DoEvents()
            End Try
            If T.IndexOf(">일시적인 서비스 오류가 발생했습니다.<"> -1 Then
                userAgentOriginalList.Remove(agent)
                T = "" : LOG("[ERR] 과도한 트래픽으로 인한 일시적인 서비스 오류가 발생했습니다.")
                program1472.Functions.Time.Delay(12000CType(MainForm, fMain).LOG_LIST)
                xWinHttp(, $"https://map.naver.com/p/search/{enQuery}?c=15.00%2C0%2C0%2C0%2Cdh")
            End If
        Loop Until T.Length > 0
        O = JSON.DeserializeObject(T)
        JSON.AddValue(O, "url", URL)
        Dim timestamp As String = DateTime.Now.ToString("yyyyMMdd_HHmmssfffff")
        Dim fileName As String = IO.Path.Combine(APP_EXPORT_PATH, $"{timestamp}.json")
        IO.File.WriteAllText(fileName, O.ToString)
        Return O
    End Function


동일 요청을 WinHttpRequest, HttpWebRequest, curl에서 보낼 때는 정상 응답을 받는데 MSXML2.ServerXMLHTTP.6.0은 오류를 토해낸다.

 <html>

<head><title>403 Forbidden</title></head>

<body>

<center><h1>403 Forbidden</h1></center>

<hr><center>nginx</center>

</body>

</html>

<!-- a padding to disable MSIE and Chrome friendly error page -->

<!-- a padding to disable MSIE and Chrome friendly error page -->

<!-- a padding to disable MSIE and Chrome friendly error page -->

<!-- a padding to disable MSIE and Chrome friendly error page -->

<!-- a padding to disable MSIE and Chrome friendly error page -->

<!-- a padding to disable MSIE and Chrome friendly error page -->



댓글목록

등록된 댓글이 없습니다.