使用ASP.NET和YoutubeFisher访问YouTube,但获取HTTP错误403

时间:2012-08-09 18:14:36

标签: c# httpwebrequest http-headers json.net

我正在尝试在ASP.NET中使用YoutubeFisher库。我制作一个HttpWebRequest来获取html内容,处理比赛以提取视频链接并在网页上显示链接。我设法使它在localhost上工作。我可以检索视频链接并在locahost上下载视频。但是当我将它推送到服务器时,它只有在我从同一服务器发送请求时才有效。如果客户端浏览器访问该页面,则客户端可以正确查看链接,但是当单击链接时,客户端会在每次客户端单击链接时获取HTTP错误403,即使链接正确。

我的分析是,当服务器使HttpWebRequest获取HTML上下文时,它也会发送HTTP头。我认为,从YouTube服务器发回的HTML内容(指向视频文件的链接)将仅响应与服务器发送的HTTP标头匹配的请求。因此,当客户点击该链接时,它会向具有不同HTTP标头的YouTube服务器发送请求。

所以,我正在考虑从客户端获取HTTP头,然后在进行HttpWebRequest之前修改Server HTTP头以包含客户端的HTTP头信息。我不太确定这是否有效。据我所知,HTTP heaer无法修改。

以下是从YouTubeFisher库中创建HttpWebRequest的代码,

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:

enter image description here

enter image description here

  

从服务器本身浏览页面,一切都按预期工作:

enter image description here

如何代表客户端制作HttpWebRequest呢?我对这个问题的分析是否正确?

感谢您的投入。

2 个答案:

答案 0 :(得分:0)

使用诸如Charles,Fiddler甚至Firebug之类的http监视器来查找成功案例中从浏览器发送的其他标头。我怀疑您需要复制acceptuser-agentreferer中的一个或多个。

答案 1 :(得分:0)

在过去,我只是假设youtube对这些链接进行了编码,以便它们仅适用于原始请求IP。如果是这样的话会更加困难。我不知道是否是这种情况,尝试转发所有的标题元素,然后再沿着这条路线前进......

唯一可能的想法是,你必须使用javascript请求将页面下载到客户端的浏览器,然后将其上传到服务器进行处理,或者在javascript中进行处理。

或者您可以让客户端通过您的服务器下载视频流,这样您的服务器就会传递数据。这显然会占用大量的带宽。