通过其API从Azure上传到Youtube

本文关键字:Youtube Azure API | 更新日期: 2023-09-27 18:35:01

我正在尝试通过其API上传到youtube,当我在当地做时,它工作正常。当它在我的 Azure 应用程序上时,它如何得到 (403( 禁止

这是我的代码:

YouTubeRequestSettings settings = new YouTubeRequestSettings("XXXXX", token, userName, Password);
YouTubeRequest request = new YouTubeRequest(settings);
Video newVideo = new Video();
newVideo.Title = "Test";
newVideo.Tags.Add(new MediaCategory("Autos", YouTubeNameTable.CategorySchema));
newVideo.Keywords = "car";
newVideo.Description = "My first try";
newVideo.YouTubeEntry.Private = false;
newVideo.Tags.Add(new MediaCategory("devTag",
  YouTubeNameTable.DeveloperTagSchema));
newVideo.YouTubeEntry.MediaSource = new MediaFileSource(**SaveFileToLocal**(fileUpload), fileUpload.ContentType);
Video createdVideo = request.Upload(newVideo);
private string **SaveFileToLocal**(HttpPostedFileBase fileUpload)
{
    string uploadedFilePath;
    if (Local)
    {
        var uploadPath = Server.MapPath("~/AlbumsUploads//" + "RD");
        uploadedFilePath = Path.Combine(uploadPath, fileUpload.FileName);
    }
    else
    {
        LocalResource localResource = RoleEnvironment.GetLocalResource("LocalWebRoleStorage");
        string[] paths = { localResource.RootPath, DateTime.Now.Ticks.ToString() + "_temp" + fileUpload.FileName.Substring(fileUpload.FileName.LastIndexOf('.')) };
        uploadedFilePath = Path.Combine(paths);
    }
    using (var fs = new FileStream(uploadedFilePath, FileMode.Create))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    return uploadedFilePath;
}   

这是我的例外。

Google.GData.Client.GDataRequestException: Execution of request failed: https://uploads.gdata.youtube.com/feeds/api/users/default/uploads ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at Google.GData.Client.GDataRequest.Execute()
--- End of inner exception stack trace ---
at Google.GData.Client.GDataRequest.Execute()
at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
at Google.GData.Client.MediaService.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
at Google.YouTube.YouTubeRequest.Upload(String userName, Video v)
at MvcWedApp.Controllers.AlbumManagementController.UploadToYouTube(HttpPostedFileBase fileUpload, Int32 albumId)
at MvcWedApp.Controllers.AlbumManagementController.Upload(Nullable`1 chunk, String name) 

有人帮忙吗?

通过其API从Azure上传到Youtube

问题是 YourTube 服务器拒绝了您的 403 授权请求,这意味着从 Web 角色 ASP.NET 身份验证请求由于某种原因而失败。它还解释了您甚至还没有开始上传,因此可能是与网络相关的访问问题。

为了解决此类问题,您可以尝试以下操作:

  1. RDP 到 Azure VM,安装 Fiddler 并收集网络流量。比较您的桌面流量,看看可能是什么问题。
  2. 还可以在 Azure VM 中安装网络监视器,比较网络流量,以了解是否由于身份验证失败或网络 IP/端口等存在一些问题而导致的问题。

此外,当您在本地进行测试时,如果您的 ASP.NET 应用程序在计算机模拟器中运行,它是否有效?

根据以下文档,您坚持使用Google授权序列,因此这将是进行故障排除的第一个地方。根据我的经验,Fiddler是您最好的朋友,了解根本原因,然后您可以找到解决方案:https://developers.google.com/youtube/2.0/developers_guide_protocol#Process_Flows_for_Uploading_Videos

注意:无论如何,这不是解决方案,但是我在这里写信是为了解释如何解决此问题。

我遇到了与您的问题类似的问题:

我和Azure技术布道者谈到了这种情况,他认为当Youtube API的端口关闭(80和443(时会出现这个问题,也许这与服务器防火墙属性有关。所以我尝试更改许多关于打开此端口的方式(远程到服务器和更改防火墙属性等(,但它不起作用。

最后我解决了我的问题,我可以理解这与端口访问无关。 我授权访问我们的谷歌帐户,并使用以下网址授予我们的云服务**: 我们知道,我们必须为每个应用程序生成一个新的特定密码。并且您还必须使用此 URL 生成一个开发密钥:

也许它可能与问题有关...