C# NET.WebClient DownloadString() 问题 - 页面重定向

tro*_*ter 1 c# webclient web-crawler downloadstring

我有这个问题 - 我正在编写一个简单的网络蜘蛛,到目前为止效果很好。问题是我正在工作的网站有一个令人讨厌的习惯,有时会重定向或向地址添加内容。在某些页面中,它会在加载后添加“/about”,而在某些页面上,它会完全重定向到另一个页面。Web 客户端会感到困惑,因为它下载了 html 代码并开始解析链接,但由于其中许多链接的格式为“../../something”,所以一段时间后它就会崩溃,因为它根据以下内容计算链接第一个给定地址(在重定向或添加“/about”之前)。当新创建的页面从队列中出来时,它会抛出 404 Not Found 异常(令人惊讶)。

现在我可以自己将“/about”添加到每个页面,但是对于狗屎和傻笑,网站本身并不总是添加它......

我将不胜感激任何想法。感谢您抽出宝贵时间,祝一切顺利!

小智 5

如果您想获取页面的重定向 URI 以解析其中的链接,请使用 WebClient 的子类,如下所示:

class MyWebClient : WebClient
{
   Uri _responseUri;

    public Uri ResponseUri
    {
        get { return _responseUri; }
    }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        WebResponse response = base.GetWebResponse(request);
        _responseUri = response.ResponseUri;
        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在使用 MyWebClient 而不是 WebClient 并使用 ResponseUri 解析链接