C# 使用ASP.NET和YouTube浏览器访问YouTube,但收到HTTP错误403
我正在尝试将库与ASP.NET一起使用。我发出HttpWebRequest以获取html内容,处理竞赛以提取视频链接并在网页上显示链接。我设法使它在localhost上工作。我可以检索视频链接并在locahost上下载视频。但是,当我将它推送到服务器时,只有当我从同一台服务器发送请求时,它才会工作。如果客户端浏览器访问该页面,客户端可以正确地查看链接,但是当单击链接时,客户端会收到HTTP错误403,即使链接正确,客户端每次单击该链接都会收到HTTP错误403 我的分析是,当服务器发出HttpWebRequest以获取HTML内容时,它也会发送HTTP头。我认为,从YouTube服务器发回的HTML内容(指向视频文件的链接)将只响应与服务器发送的HTTP头匹配的请求。所以,当客户端点击链接时,它会向YouTube服务器发送带有不同HTTP头的请求 因此,我考虑从客户端获取HTTP头,然后修改服务器HTTP头以在发出HttpWebRequest之前包含客户端的HTTP头信息。我不太确定这是否有效。据我所知,HTTP服务器无法修改 下面是从YouTubeFisher库生成HttpWebRequest的代码C# 使用ASP.NET和YouTube浏览器访问YouTube,但收到HTTP错误403,c#,httpwebrequest,http-headers,json.net,C#,Httpwebrequest,Http Headers,Json.net,我正在尝试将库与ASP.NET一起使用。我发出HttpWebRequest以获取html内容,处理竞赛以提取视频链接并在网页上显示链接。我设法使它在localhost上工作。我可以检索视频链接并在locahost上下载视频。但是,当我将它推送到服务器时,只有当我从同一台服务器发送请求时,它才会工作。如果客户端浏览器访问该页面,客户端可以正确地查看链接,但是当单击链接时,客户端会收到HTTP错误403,即使链接正确,客户端每次单击该链接都会收到HTTP错误403 我的分析是,当服务器发出HttpW
public static YouTubeService Create(string youTubeVideoUrl)
{
YouTubeService service = new YouTubeService();
service.videoUrl = youTubeVideoUrl;
service.GetVideoPageHtmlSource();
service.GetVideoTitle();
service.GetDownloadUrl();
return service;
}
private void GetVideoPageHtmlSource()
{
HttpWebRequest req = HttpWebRequest.Create(videoUrl) as HttpWebRequest;
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
videoPageHtmlSource = new StreamReader(resp.GetResponseStream(), Encoding.UTF8).ReadToEnd();
resp.Close();
}
客户端浏览页面,但链接在那里,但给出HTTP 403:
从服务器本身浏览页面,一切正常:
那么,我如何代表客户提出HttpWebRequest呢?我对这个问题的分析正确吗
感谢您的输入。使用诸如Charles、Fiddler甚至Firebug之类的http监视器,以了解在成功案例中从浏览器发送的附加头。我怀疑您需要复制一个或多个
accept
、user-agent
或referer
过去我只是假设youtube对这些链接进行了编码,以便它们只适用于原始请求IP。如果是这样的话,那就困难得多。我不知道这是不是真的,在走这条路线之前,试着转发你能转发的所有标题元素
想到的唯一可能性是,您必须使用javascript请求将页面下载到客户端浏览器,然后将其上载到服务器进行处理,或者使用javascript进行处理
或者,您可以让客户端通过服务器下载视频流,这样服务器就可以传递数据。这显然会占用大量的带宽