如何在不重定向的情况下检索 HTML 页面?

How to retrieve HTML Page without getting redirected?

我想抓取网站的 HTML。当我用我的浏览器访问这个网站时(无论是Chrome还是FireFox),访问这个网站都没有问题+ HTML.

当我尝试使用 HttpWebRequestHtmlAgilityPack 等方法用 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# 代码需要:

  1. 访问站点一次,被重定向,但从响应中获取 cookie 值 header。
  2. 返回请求中具有正确 cookie 值的站点 header。

您可以转到此 post 中的第一个 link 以查看如何为请求设置 cookie 值的示例。