【问题标题】:How to retrieve HTML Page without getting redirected?如何在不重定向的情况下检索 HTML 页面?
【发布时间】:2017-10-09 19:23:50
【问题描述】:

我想抓取网站的 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;
}

【问题讨论】:

  • 那么,如果你们没有人可以访问它,那背后是什么?只有德国 IP 还是什么?

标签: c# html redirect httpwebrequest html-agility-pack


【解决方案1】:

当然,cookie 是罪魁祸首 again,因为 cookie 很棒而且很棒。

那么,让我们看看您第一次访问该网站时 Chrome 会发生什么:

(我去了https://www.jodel.city/7700#!home):

是的,我收到了 302 重定向,但服务器也告诉我设置 __cfduid cookie(实际上是两次)。

当您再次访问该站点时,您将正确地进入该站点:

注意这次__cfduid cookie 是如何发送的?这就是这里的关键。

您的 C# 代码需要:

  1. 访问该站点一次,被重定向,但从响应标头中获取 cookie 值。
  2. 返回到请求标头中包含正确 cookie 值的站点。

您可以转到本文的第一个链接,查看如何为请求设置 cookie 值的示例。

【讨论】:

  • 不错的调试-Fu gunr2171.
  • 现在,为了记录,我不知道为什么服务器会这样做。正如在那篇相关文章中一样,您不应该要求您的客户在 到达网站之前拥有 cookie 值。希望这只是服务器部分的糟糕编程。
  • 你太棒了。刚刚用我的 CookieValues 对其进行了测试,看看它是否有效。有用!只需要动态获取 Cookie,但我可以自己完成。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多