F# HTTP 요청

이 문서의 목적은 try-catch 를 사용하여 cancellation token 로 래핑된 F#에서 HTTP 요청을 만드는 예제를 제공하는 것입니다.

예제는 console application를 사용하여 .NET 6에 빌드되었으며 아래 패키지가 필요합니다.

Newtonsoft.Json/13.0.1


또한 API 자리 표시자 서비스를 무료로 사용할 수 있습니다JSONPlaceholder.

아래 코드를 Program.fs에 붙여넣고 실행합니다.

open System
open System.Net
open System.Net.Http
open System.Threading
open System.Threading.Tasks
open Newtonsoft.Json

type Post =
    { userId: int
      id: int
      title: string
      body: string }

let DeserializePost (response: string) : Post =
    JsonConvert.DeserializeObject<Post>(response)

let GetItem
    (client: HttpClient)
    (message: HttpRequestMessage)
    (ct: CancellationToken) : Task<option<Post>> =    

    task {        
        try
            let! response = client.SendAsync(message, ct)
            if response.StatusCode = HttpStatusCode.OK then
                let! payload = response.Content.ReadAsStringAsync()
                return Some (DeserializePost payload)
            else
                return None
        with
        | :? TaskCanceledException as ex -> printfn $"Task Canceled Exception: {ex.Message}"
                                            return None
        | :? TimeoutException as ex -> printfn $"Timeout Exception: {ex.Message}"
                                       return None
        | ex -> printfn $"General Exception: {ex.Message}"
                return None
    }

let main =    
    //GET
    task {
        let client = new HttpClient()
        let tokenSource = new CancellationTokenSource(3000)
        let token = tokenSource.Token      
        let getMessage = new HttpRequestMessage(HttpMethod.Get, "https://jsonplaceholder.typicode.com/posts/1")

        let! item = GetItem client getMessage token
        printfn $"{item}"
    }

main.Wait()


산출

Some({ userId = 1
  id = 1
  title =
   "sunt aut facere repellat provident occaecati excepturi optio reprehenderit"
  body =
   "quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto" })


추가 자료

System.Net.Http, Http.Fs 또는 Flurl을 사용하여 F# HTTP 호출 만들기 -> here
F#으로 Serilog 구성 ->

좋은 웹페이지 즐겨찾기