我正在尝试将YoutubeFisher库与 ASP.NET 一起使用。我制作了一个 HttpWebRequest 来抓取 html 内容,处理比赛以提取视频链接并在网页上显示链接。我设法使它在本地主机上工作。我可以检索视频链接并在 locahost 上下载视频。但是当我将它推送到服务器时,它只有在我从同一服务器发送请求时才有效。如果客户端浏览器访问该页面,客户端可以正常看到链接,但是当单击链接时,客户端会收到 HTTP 错误 403,每次客户端单击链接时,即使链接是正确的。
我的分析是,当服务器使 HttpWebRequest 抓取 HTML 内容时,它也会发送 HTTP 标头。我认为,从 YouTube 服务器发回的 HTML 内容(指向视频文件的链接)只会响应与从服务器发送的 HTTP 标头匹配的请求。因此,当客户端单击链接时,它会使用不同的 HTTP 标头向 YouTube 服务器发送请求。
因此,我正在考虑从客户端获取 HTTP 标头,然后在发出 HttpWebRequest 之前修改服务器 HTTP 标头以包含客户端的 HTTP 标头信息。我不太确定这是否可行。据我所知,HTTP heer 无法修改。
下面是从 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 呢?我对这个问题的分析正确吗?
谢谢您的意见。