首页 > 解决方案 > 如何从 F# 代码进行外部 POST API 调用

问题描述

我想从 F# 调用外部 POST API,它具有如下多部分表单请求正文,那么如何在 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())
    ]


))

标签: webf#f#-dataf#-fake

解决方案


我将为此使用 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 中的代码:

// 在http://fsharp.org了解有关 F# 的更多信息

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 pfor 测试目的,在我的情况下,该文件包含:

➜ 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 包有很多发送表单的示例,该库设法添加您需要的heradersmultipart-form-data


推荐阅读