以下に示すように、通常の YouTube ブラウザベースのアップロード フォームがあります。IE、Chrome、および古いバージョンの Firefox でうまく機能します。ただし、私の Firefox 16.0.2 は POST でハングアップします。Firefox 16.x を搭載した他のコンピューターで問題を再現しました。
YouTube の URL をhttps://uploads.gdata.youtube.comからhttp://uploads.gdata.youtube.comに変更して SSL を手動でオーバーライドすると、ファイルは正しくアップロードされます。
さらに奇妙なことに、リクエストはFirebugの [ネット] タブにまったく記録されません。Firefox のWeb コンソールでは、リクエストは表示されますが、レスポンスとステータス コードがまったく表示されません。次に、[ HTTPS トラフィックの復号化] オプションを有効にして Fiddler を使用すると、ファイルが正しくアップロードされます。
何が起こっているのか、または問題を解決せずに SSL トラフィックを監視する方法を知っている人はいますか?
<!DOCTYPE html>
<html>
<head><title>YouTube Test</title></head>
<body>
<form id="frmYouTube" enctype="multipart/form-data" method="post" action="https://uploads.gdata.youtube.com/action/FormDataUpload/YOU_TUBE_URL?nexturl=https%3a%2f%2fMY.DOMAIN.COM%2fDIR_1%2fDIR_2%3fid2%3dLOCAL_ID">
<table>
<tr><td><input type="file" name="file" /></td></tr>
<tr><td>
<input type="hidden" name="token" value="MY_YOUTUBE_TOKEN" />
<input type="submit" value="Upload" />
</td></tr>
</table>
</form>
</body>
</html>
YouTube の URL とトークンは、バックエンドで ASP.Net と Google.GData.YouTube ライブラリを使用して生成されます。そのコードの一部を次に示します。
public class BaseModel
{
public string SITE_YOUTUBE_APP_NAME = "";
public string SITE_YOUTUBE_DEV_KEY = "";
public string SITE_YOUTUBE_USERNAME = "";
public string SITE_YOUTUBE_PASSWORD = "";
public string YOUTUBE_CATEGORY = "";
public FormUploadToken FormToken;
public void Load()
{
YouTubeRequestSettings settings = new YouTubeRequestSettings(
SITE_YOUTUBE_APP_NAME, SITE_YOUTUBE_DEV_KEY,
SITE_YOUTUBE_USERNAME, SITE_YOUTUBE_PASSWORD);
YouTubeRequest request = new YouTubeRequest(settings);
Video newVideo = new Video();
string title = "Test Title";
string description = "Test Description";
newVideo.Title = title;
newVideo.Tags.Add(new MediaCategory(YOUTUBE_CATEGORY, YouTubeNameTable.CategorySchema));
newVideo.Keywords = "test";
newVideo.Description = description;
newVideo.YouTubeEntry.Private = false;
FormToken = request.CreateFormUploadToken(newVideo);
}
}