curl:Per-fileContent-Type,用于多部分POST(YouTube API)



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

我当前的命令行(从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发送的实际请求时,看起来两个文件都是按正确的顺序发送的,但元数据的ContentType设置为application/octet-stream;上传按预期完成,但YouTube拒绝处理视频。

如果我试图提交带有--data--data-ascii--form-string等的upl.xml,我只会收到各种其他错误,这让我相信这是由于不正确的内容类型。如果我忽略元数据,只发送视频文件,效果很好,但不幸的是,这并不能解决我的问题。

我是不是错过了什么?如果不是,不爆发libcurl就有可能做到这一点吗?

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

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

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

但也就是说,我想接收服务器不太可能真正关心客户端声称的内容类型。这意味着我认为问题的根源实际上根本不是内容类型。

最新更新