2012-11-21 15 views
18

API仕様hereに続いて、curlを使用してYouTubeにバッチアップロードをしようとしています。要するに、XML形式のメタデータとContent-Typeのapplication/atom+xml; charset=UTF-8のマルチパートPOSTリクエストが必要で、その後にビデオデータが続きます。curl:マルチパートPOST(YouTube API)のファイルごとのコンテンツタイプ

(upl.xmlとupl.mkvからの映像からメタデータをフェッチする)私の現在のコマンドラインは、このようなものになります。私は--traceで送信されているの実際の要求をチェックすると

curl -s -F "[email protected]" -F "[email protected]" -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 

を、それが見えます両方のファイルが正しい順序で送信されているものの、メタデータのContent-Typeがapplication/octet-streamに設定されている場合と同様です。アップロードは正常に完了しますが、YouTubeは動画の処理を拒否します。

私は--data--data-ascii--form-stringなどでupl.xmlを提出しようとした場合、私はちょうどそれがダウンして、誤ったコンテンツタイプのだと信じて私をリードして他のエラーの品揃えを取得。メタデータを無視してビデオファイルを送信するだけでうまくいきますが、残念ながらこれで問題は解決しません。

私はここに何か不足していますか?そうでない場合は、libcurlを打ち破ることなくこれを行うことが可能ですか?

答えて

26

まず、 "; type = magic/string"を追加して、アップロードするパートのコンテンツタイプを指定できます。 ; [URL]

(使用--traceや--trace-

カール-F "タイプ=ビデオ/ MPEG4 [email protected]":ビデオの場合、例えば同様にあなたが望むものを正確に送信していることを確認するためにasciiを使用してください)

...しかし、これは、受信側サーバーが実際にクライアントがコンテンツタイプを主張していると気にすることはほとんどないと思います。意味あなたの問題の原因は実際にはコンテンツタイプではないと思います。

関連する問題