Запрос POST с использованием F # - PullRequest
0 голосов
/ 21 июня 2020

Я хочу сделать запрос POST с телом, содержащим простую пару значений ключа, например { "Id":"VVE87BDA-B0A1-48F3-A7C7-F3482CE2UIJ" } Как я могу сделать это в F # ??

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Посмотрите FSharp.Data библиотеку

Http.RequestString
  ( "http://httpbin.org/post", 
    headers = [ ContentType HttpContentTypes.Json ],
    body = TextRequest """ {"test": 42} """)
0 голосов
/ 24 июня 2020

Вы также можете сделать это через библиотеки. NET, как в C# или VB. Вот как это работает с HttpWebRequest (при условии, что вы не используете task или async):

let obj = {| Id = "VVE87BDA-B0A1-48F3-A7C7-F3482CE2UIJ" |}

let req = WebRequest.CreateHttp "http://www.example.com"
req.Method <- "POST"
req.ContentType <- "application/json"

do (
    use reqStream = req.GetRequestStream()
    use sw = new StreamWriter(reqStream )
    obj |> JsonConvert.SerializeObject |> sw.Write
)

use resp = req.GetResponse()
use respStream = resp.GetResponseStream()
use sr = new StreamReader(respStream)
let respBody = sr.ReadToEnd()

printfn "%s" respBody

async версия:

let obj = {| Id = "VVE87BDA-B0A1-48F3-A7C7-F3482CE2UIJ" |}

let req = WebRequest.CreateHttp "http://www.example.com"
req.Method <- "POST"
req.ContentType <- "application/json"

do! async {
    use! reqStream = req.GetRequestStreamAsync() |> Async.AwaitTask
    use sw = new StreamWriter(reqStream )
    do! obj |> JsonConvert.SerializeObject |> sw.WriteAsync |> Async.AwaitTask
}

use! resp = req.AsyncGetResponse()
use respStream = resp.GetResponseStream()
use sr = new StreamReader(respStream)
let! respBody = sr.ReadToEndAsync() |> Async.AwaitTask

printfn "%s" respBody

В любом случае Лучше всего убедиться, что reqStream выходит за пределы области видимости и удаляется до вызова GetResponse, чтобы данные запроса были полностью записаны.

...