我正在尝试使用scalaj-http发送POST请求以进行Twitter上传。香港专业教育学院附上他们要求的文档。我遇到的问题是尝试将实际的二进制文件作为“媒体”的参数传递。我似乎只能看到如何执行postMulti,它只是文件,然后添加参数,但实际上没有将数据作为参数传递。
val appendResponse = Http(twitterApiUrl)
.postMulti(MultiPart("media", "Output.bin", "application/mac-binary", byteArray))
.postForm(Seq("command" -> "APPEND", "media_id" -> twitterMediaID, "segment_index" -> "0"))
.oauth(consumer = consumer, token = access)
.asString
https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-append
答案 0 :(得分:1)
我认为您应该使用“ media”而不是“ Output”作为MultiPart的名称,并且不要在参数中使用“ media”。
更新:我使用Charles跟踪了请求,但没有发现任何对我来说不对的东西(将“输出”更改为“媒体”之后)。下面的代码并不是真正的代码修复,而是更多解决方法:
val appendResponse = Http("https://upload.twitter.com/1.1/media/upload.json")
.postForm
.params(
Seq(
"command" -> "APPEND",
"media_id" -> twitterMediaID,
"segment_index" -> "0",
"media_data" -> Base64.getEncoder.encodeToString(byteArray)
)
)
.oauth(consumer, token)
.asString
这给了我204回应,我没有进一步测试是否可以上传完整的文件。
还请注意,这使用的是media_data(base64)版本,并且使用的是“ application / x-www-form-urlencoded”,而不是文档中指定的“ multipart / form-data”。因此,根据文档,这是不正确的。
答案 1 :(得分:0)
https://github.com/scalaj/scalaj-http/issues/170
此问题的修补程序记录在此github问题链接上