通过其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)
有人帮忙吗?
问题是 YourTube 服务器拒绝了您的 403 授权请求,这意味着从 Web 角色 ASP.NET 身份验证请求由于某种原因而失败。它还解释了您甚至还没有开始上传,因此可能是与网络相关的访问问题。
为了解决此类问题,您可以尝试以下操作:
- RDP 到 Azure VM,安装 Fiddler 并收集网络流量。比较您的桌面流量,看看可能是什么问题。
- 还可以在 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 生成一个开发密钥:
也许它可能与问题有关...