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

时间:2012-11-21 00:22:50

标签: curl youtube-api

我正在尝试使用curl批量上传到YouTube,遵循API规范here;简而言之,它需要一个多部分POST请求,其中包含XML格式的元数据和内容类型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

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

如果我尝试使用--data--data-ascii--form-string等提交upl.xml,我会收到各种其他错误,这让我误认为是错误的内容类型。如果我忽略元数据并只发送视频文件它工作正常,但不幸的是这并没有解决我的问题。

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

1 个答案:

答案 0 :(得分:32)

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

  

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

(使用--trace或--trace-ascii验证curl是否完全按照您的要求发送)

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