ASP.NET でYoutubeFisherライブラリを使用しようとしています。HttpWebRequest を作成して html コンテンツを取得し、コンテストを処理してビデオ リンクを抽出し、Web ページにリンクを表示します。ローカルホストで動作させることができました。ビデオ リンクを取得し、locahost でビデオをダウンロードできます。しかし、サーバーにプッシュすると、同じサーバーからリクエストを送信した場合にのみ機能します。そのページがクライアント ブラウザによってアクセスされた場合、クライアントはリンクを正しく表示できますが、リンクがクリックされると、クライアントがリンクをクリックするたびに、リンクが正しい場合でも HTTP エラー 403 が返されます。
私の分析では、サーバーが HttpWebRequest を作成して HTML コンテンツを取得するときに、HTTP ヘッダーも送信するということです。YouTube サーバーから返された HTML コンテンツ (動画ファイルへのリンク) は、サーバーから送信されたその HTTP ヘッダーに一致する要求のみに応答すると思います。そのため、クライアントがリンクをクリックすると、別の HTTP ヘッダーで YouTube サーバーにリクエストが送信されます。
したがって、クライアントから HTTP ヘッダーを取得し、サーバーの HTTP ヘッダーを変更して、HttpWebRequest を作成する前にクライアントの 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 を作成するにはどうすればよいですか? この問題の私の分析は正しいですか?
ご意見ありがとうございます。