0

我正在尝试使用 API v2.0 将视频从 c# Web 应用程序上传到 Youtube。

这是我找到的文档:

YouTube API 2.0 文档

我可以为 Web 应用程序完成 AuthSub 并将视频元数据发送到 youtube;之后,我可以读取进行基于浏览器的上传所需的令牌和 URL。

现在我必须填写这个 HTML 表单来执行真正的上传。

<form action="post_url?nexturl=http://example.com" method ="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="token" value="token_value"/>
<input type="submit" value="go" />
</form>

我在网上搜索了一个示例,说明如何以编程方式“模拟”并从代码隐藏发送此 html 表单,但没有运气。

这是我仅为测试目的编写的实际代码:

  YouTubeRequestSettings settings = new YouTubeRequestSettings("TEST_APP", "DEVELOPER_KEY", "USERNAME", "PASSWORD");
        YouTubeRequest request = new YouTubeRequest(settings);


        Video newVideo = new Video();

        newVideo.Title = "My Test Movie";
        newVideo.Tags.Add(new MediaCategory("Autos", YouTubeNameTable.CategorySchema));
        newVideo.Keywords = "cars, funny";
        newVideo.Description = "My description";
        newVideo.YouTubeEntry.Private = false;
        newVideo.Tags.Add(new MediaCategory("mydevtag, anotherdevtag", YouTubeNameTable.DeveloperTagSchema));

        FormUploadToken token_youtube = request.CreateFormUploadToken(newVideo);
        string url_per_post_youtube = token_youtube.Url + "?nexturl=" + HttpContext.Current.Request.Url.AbsoluteUri + "test.aspx"; 

        byte[] fileBytes = File.ReadAllBytes("C:\\VIDEO.MOV");
        StringBuilder sb = new StringBuilder();

        foreach (byte b in fileBytes)
        {
            sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
        }

        ASCIIEncoding encoding = new ASCIIEncoding();
        string postData = "token=" + token_youtube.Token.ToString();
        postData += ("&file=" + sb );
        byte[] data = encoding.GetBytes(postData);
        try
        {
            // Prepare web request...
            HttpWebRequest myRequest =
              (HttpWebRequest)WebRequest.Create(url_per_post_youtube);
            myRequest.Method = "POST";
            myRequest.ContentType = "multipart/form-data";
            myRequest.KeepAlive = true;
            myRequest.ContentLength = data.Length;
            Stream newStream = myRequest.GetRequestStream();
            // Send the data.
            newStream.Write(data, 0, data.Length);
            newStream.Close();

            string strResponse;
            StreamReader stIn = new StreamReader(myRequest.GetResponse().GetResponseStream());
            strResponse = stIn.ReadToEnd();
            stIn.Close();
        }
        catch (Exception ex)
        {
            string asd = ex.Message;
        }

使用此代码,youtube 远程服务器会回复:

远程服务器返回错误:(400) Bad Request

400 响应代码标识错误请求。例如,如果您向错误的 URL 提交请求或在请求中包含不受支持或不存在的参数,您将收到 400 响应代码。API响应内容会解释API返回400响应码的原因

我找不到理解发生了什么的方法

4

1 回答 1

1

所以你需要一种方法来理解什么是appenin'?我认为最好的方法是使用工具来准确找到您发送到 youtube 的消息。

fiddler是一个非常有用的监控 http 流量的工具。有了这个,您可以准确地看到您发送的内容。要么您没有发送您认为要发送的消息,要么您对需要发送的消息的形式有误。这应该让您确定其中发生了哪一个。

于 2013-03-05T11:51:09.487 回答