带有图像附件的 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
。
我正在努力使用 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
。