Julia HTTP 发送带有图片附件的 POST 请求

3
我正在努力使用Julia HTTP包实现带有图像附件的POST请求。在Python中,我可以这样做(源自Pushover):
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包以简单的方式进行文件附件?
非常感谢!
1个回答

2

使用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"),
]

您可以通过类似以下方式来比较/验证HTTP.jl的请求和requests的请求:

$ netcat -lp 8080

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


非常感谢您提供详细的示例和解释。完美地运行。 - Marian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接