curl:多部分POST的每文件内容类型(YouTube API)

我正在尝试使用curl批量上传到YouTube,遵循API规范here;简而言之,它需要一个多部分POST请求,其中包含XML格式的元数据和 application/atom+xml; charset=UTF-8 的Content-Type,后面跟着视频数据本身 .

我当前的命令行(从upl.xml获取元数据和upl.mkv中的视频)看起来像这样:

curl -s -F "file=@upl.xml" -F "file=@upl.mkv" -H 'GData-Version: 2' -H 'Authorization: GoogleLogin auth=<AUTH>' -H 'Slug: upl.mkv' -H 'X-GData-Key: key=<KEY>' http://uploads.gdata.youtube.com/feeds/api/users/default/uploads

当我检查与 --trace 一起发送的实际请求时,看起来两个文件都以正确的顺序发送,但元数据的Content-Type设置为 application/octet-stream ;上传按预期完成,但YouTube拒绝处理视频 .

如果我尝试使用 --data--data-ascii--form-string 等提交upl.xml . 我只是得到了各种其他错误,这让我相信它解决了我的问题 .

我在这里遗漏了什么,如果没有,是否可以在不破坏libcurl的情况下做到这一点?

回答(1)

2 years ago

首先,您可以通过添加“; type = magic / string”为上传的部件指定内容类型 . 例如,在您的视频案例中:

curl -F“file =@upl.mpeg4; type = video / mpeg4”[URL]

(使用--trace或--trace-ascii来验证curl是否准确发送了你想要的内容)

...但是这说,我猜测接收服务器实际上不太关心客户端声称内容类型是什么 . 含义我认为问题的根源实际上根本不是内容类型 .