如何在不重定向的情况下检索 HTML 页面?
How to retrieve HTML Page without getting redirected?
我想抓取网站的 HTML。当我用我的浏览器访问这个网站时(无论是Chrome还是FireFox),访问这个网站都没有问题+ HTML.
当我尝试使用 HttpWebRequest
和 HtmlAgilityPack
等方法用 C# 解析 HTML 时,该网站将我重定向到另一个网站,因此我解析了 HTML重定向的网站。
知道如何解决这个问题吗?
我认为该站点将我的程序识别为程序并立即重定向,所以我尝试使用 Selenium 和 GoogleDriver 以及 FireFoxDriver 但也不走运,我立即被重定向。
网站:https://www.jodel.city/7700#!home
private void bt_load_Click(object sender, EventArgs e)
{
var url = @"https://www.jodel.city/7700#!home";
var req = (HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect = false;
// req.Referer = "http://www.muenchen.de/";
var resp = req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
String returnedContent = sr.ReadToEnd();
Console.WriteLine(returnedContent);
return;
}
当然,cookie 是罪魁祸首 again,因为 cookie 很棒,令人惊叹。
那么,让我们看看在您第一次访问该网站时 Chrome 发生了什么:
(我去了https://www.jodel.city/7700#!home
):
是的,我得到了 302 重定向,但服务器还告诉我设置一个 __cfduid
cookie(实际上是两次)。
当您再次访问该网站时,您被正确地允许进入该网站:
请注意这次 __cfduid
cookie 是如何发送的?这就是关键。
您的 C# 代码需要:
- 访问站点一次,被重定向,但从响应中获取 cookie 值 header。
- 返回请求中具有正确 cookie 值的站点 header。
您可以转到此 post 中的第一个 link 以查看如何为请求设置 cookie 值的示例。
我想抓取网站的 HTML。当我用我的浏览器访问这个网站时(无论是Chrome还是FireFox),访问这个网站都没有问题+ HTML.
当我尝试使用 HttpWebRequest
和 HtmlAgilityPack
等方法用 C# 解析 HTML 时,该网站将我重定向到另一个网站,因此我解析了 HTML重定向的网站。
知道如何解决这个问题吗?
我认为该站点将我的程序识别为程序并立即重定向,所以我尝试使用 Selenium 和 GoogleDriver 以及 FireFoxDriver 但也不走运,我立即被重定向。
网站:https://www.jodel.city/7700#!home
private void bt_load_Click(object sender, EventArgs e)
{
var url = @"https://www.jodel.city/7700#!home";
var req = (HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect = false;
// req.Referer = "http://www.muenchen.de/";
var resp = req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
String returnedContent = sr.ReadToEnd();
Console.WriteLine(returnedContent);
return;
}
当然,cookie 是罪魁祸首 again,因为 cookie 很棒,令人惊叹。
那么,让我们看看在您第一次访问该网站时 Chrome 发生了什么:
(我去了https://www.jodel.city/7700#!home
):
是的,我得到了 302 重定向,但服务器还告诉我设置一个 __cfduid
cookie(实际上是两次)。
当您再次访问该网站时,您被正确地允许进入该网站:
请注意这次 __cfduid
cookie 是如何发送的?这就是关键。
您的 C# 代码需要:
- 访问站点一次,被重定向,但从响应中获取 cookie 值 header。
- 返回请求中具有正确 cookie 值的站点 header。
您可以转到此 post 中的第一个 link 以查看如何为请求设置 cookie 值的示例。