带有图像附件的 Julia HTTP POST 请求

Julia HTTP POST request with image attachment

我正在努力使用 Julia HTTP package. In Python I can do (source from Pushover 实现带有图像附件的 POST 请求:

import requests
r = requests.post("https://api.pushover.net/1/messages.json", data = {
  "token": "APP_TOKEN",
  "user": "USER_KEY"
},
files = {
  "attachment": ("image.jpg", open("myimage.jpg", "rb"), "image/jpeg")
})

如何使用 Julia/HTTP 或其他 Julia 包以简单的方式添加此类文件附件?

非常感谢!

这应该是使用 HTTP.jl 的等效请求:

import HTTP
url = "http://localhost:8080" # check request with e.g. netcat -lp 8080
open("cat.jpg") do io
    headers = []
    data = [
        "token" => "APP_TOKEN",
        "user" => "USER_KEY",
        "attachment" => io,
    ]
    body = HTTP.Form(data)
    HTTP.post(url, headers, body)
end

文件名 (cat.jpg) 和内容类型 (image/jpeg) 是从 io.

中推断出来的

如果你需要更好的控制,比如你希望请求中的文件名与磁盘上的文件名不同,或者你想手动指定Content-Type,你可以手动构造一个HTTP.Multipart条目,像这样:

data = [
    "token" => "APP_TOKEN",
    "user" => "USER_KEY",
    "attachment" => HTTP.Multipart("other_filename.jpg", io, "image/png"),
]

您可以 compare/verify 来自 HTTP.jl 的请求和来自 requests 的请求,方法是使用

$ netcat -lp 8080

并将请求发送到 http://localhost:8080