web - 如何从 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())
]
))
解决方案
我将为此使用 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
推荐阅读
- python - View Docker Swarm CMD Line Output
- css - 当存在太多列的水平滚动垫表时,左粘性列消失
- apache-superset - Apache Superset - 交互式标记不起作用/ javascript 被超集忽略
- onload - 使用浏览器后退按钮时如何禁用正文加载
- css - 如何让 div 表格单元格中包含的 div 填充?
- reactjs - React .map 不是函数但不能传递数组
- python-3.x - Space Invaders bug pygame
- python - Pandas:选择具有列数据类型的行
- jersey - JSF 客户端错误使用 JAX-RS 制作的 Rest Service
- mvvm - 在页面加载之前设置传递的参数