Как сделать внешний вызов POST API из кода F # - PullRequest
1 голос
/ 06 июля 2019

Я хочу вызвать внешний POST API из F #, который имеет тело запроса многочастной формы, как показано ниже, так как это сделать в F #?

External POST API
url : “https://”
Content-Type : Multipart/Form-data
Body :- key(file) -> value(file which is browsed)
key(secured) -> value(String)

Спасибо за чтение этого вопроса.

Я пыталсякод ниже, но у меня не работает

Http.Request
  ( "http://endpoint/for/multipart/data", 
  body = Multipart(
    boundary = "define a custom boundary here", // this is used to separate the items you're streaming
    parts = [
      MultipartItem("formFieldName", "file",IFormFile.OpenReadStream())
    ]


))

1 Ответ

0 голосов
/ 09 июля 2019

Я буду использовать и HTTp-клиент для этого, в fsharp вы можете использовать различные вещи, такие как F # Data: HTTP Utilities или и пакет HTTP-клиента для этой цели. Я рекомендую HTTP.fs :

Просто создайте консольное приложение и добавьте этот пакет nuget

 dotnet new console -lang f# -o http-rest-client
 cd http-rest-client
 dotnet add package Http.fs
 dotnet add package Hopac

Затем замените код в Program.fs следующим образом:

// Узнайте больше о F # на http://fsharp.org

open System.IO
open System.Text
open Hopac
open HttpFs.Client

let multipartRequest =
    Request.createUrl Post "http://httpbin.org/post"
    |> Request.setHeader (Accept "application/json")
    |> Request.body (BodyForm [
        FormFile ("file", ("testfile.txt",
                           ContentType.create("text", "plain"),
                           Binary (File.ReadAllBytes ("./testfile.txt"))
                           ))])
    |> Request.responseAsString
    |> run



[<EntryPoint>]
let main argv =
    printfn "%s" multipartRequest
    0 

Создайте файл с, в этом случае, чтобы лучше его увидеть .txt файл с читаемым содержимым. и httpbin p для тестирования мошенничества, в моем случае файл содержит:

➜ cat testfile.txt
calimero calimero calimero calimero

Тогда вы можете запустить свой проект:

dotnet run

{
  "args": {},
  "data": "",
  "files": {
    "file": "calimero calimero calimero calimero\n"
  },
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Content-Length": "241",
    "Content-Type": "multipart/form-data; boundary=\"BPj'o/kJ+CaKDQUuOnIaoLq/diChFH\"",
    "Host": "httpbin.org"
  },
  "json": null,
  "origin": "83.53.248.254, 83.53.248.254",
  "url": "https://httpbin.org/post"
}

В пакете Http.fs есть много примеров для отправки формы, и библиотеке удается добавить херадеров, которые вам нужны для multipart-form-data

...