我正在尝试使用scalaj-http发送twitter上传的帖子请求。我附上了他们对请求所需的文件。我遇到麻烦的部分是试图将实际的二进制文件作为"media“的参数传递。我似乎只能看到如何做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)
.asStringhttps://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-append
发布于 2018-07-16 19:12:25
https://github.com/scalaj/scalaj-http/issues/170
此github问题链接中记录了该问题的修复。
发布于 2018-07-13 20:17:38
我认为您应该使用"media“而不是”MultiPart“作为您的MultiPart的名称,而不是在您的params中使用"media”。
更新:我使用跟踪请求,没有发现任何在我看来不对劲的地方(在将“输出”改为“媒体”之后)。下面的代码实际上并不是针对您的代码的修复,而是更多的解决方法:
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 form-urlencoded’,而不是文档中指定的'multipart/form-data‘。因此,根据文档,这是不正确的。
https://stackoverflow.com/questions/51331094
复制相似问题