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

fur*_*urq 24 curl youtube-api

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

我当前的命令行(从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
Run Code Online (Sandbox Code Playgroud)

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

如果我试图提交upl.xml用--data,--data-ascii,--form-string等我只是得到其它错误的分类,这使我相信它的下跌不正确的内容类型.如果我忽略元数据并只发送视频文件它工作正常,但不幸的是,这并没有解决我的问题.

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

Dan*_*erg 35

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

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

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

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