Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET和YouTube浏览器访问YouTube,但收到HTTP错误403_C#_Httpwebrequest_Http Headers_Json.net - Fatal编程技术网

C# 使用ASP.NET和YouTube浏览器访问YouTube,但收到HTTP错误403

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

我正在尝试将库与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的代码

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进行处理

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