C# 使用webscraper下载文件有时会生成HTML页面

C# 使用webscraper下载文件有时会生成HTML页面,c#,web-scraping,screen-scraping,webclient,C#,Web Scraping,Screen Scraping,Webclient,我有一个C#应用程序,可以从第三方网站访问数据。我使用WebClient,调用DownloadData并处理字节(DownloadFile将产生类似的结果) 直到最近,这种方法一直运作良好。现在,我通常会得到一个类似于以下内容的html页面,而不是所需的XML文件: var requestedUrl=escapeProperty(window.location.href); STSNavigate(“/CustomErrors/ErrorPage.aspx?oldUrl=“+requested

我有一个C#应用程序,可以从第三方网站访问数据。我使用WebClient,调用DownloadData并处理字节(DownloadFile将产生类似的结果)

直到最近,这种方法一直运作良好。现在,我通常会得到一个类似于以下内容的html页面,而不是所需的XML文件:


var requestedUrl=escapeProperty(window.location.href);
STSNavigate(“/CustomErrors/ErrorPage.aspx?oldUrl=“+requestedUrl”);
我被难住了,为什么这会从一直工作到一直给我带来问题。有时,我仍然可以得到预期的XML文件。您是否知道这个问题可能是什么,以及我如何解决它

可能值得注意的是,如果我在浏览器中手动单击下载链接,会弹出一个javascript窗口并在文件下载之前关闭。我正在使用WebBrowser截取弹出窗口的非静态URL,并将该链接(以及标题/cookie信息)传递给WebClient。链接看起来像


感谢您抽出时间

看起来第三方页面正在抛出异常。这可能是由于您正在传递的参数造成的,也可能是它们本身的问题。最好的做法是联系提供商,看看记录了哪些错误(希望他们在某处记录)。否则你只会猜测你做错了什么


会话querystring参数中是否可能存在未正确处理的编码\转义字符?这将是我的第一个猜测,因为没有任何真正的错误细节

如果它抛出错误,我会尝试收集HTTP状态代码,您可以通过使用HttpWebRequest和HttpWebResponse(我相信这些预先发布的WebClient)来完成。还有一些棘手的方法可以继续使用WebClient并检索状态代码,我会在您实际下载之前检查内容类型


在任何情况下,即使提供错误页面,服务器也应该使用适当的HTTP状态代码进行响应。(至少在一个完美的世界里)。

感谢您的快速响应!这让人放心。他们的网站似乎有很多问题,但这也是我第一次这样做。至于查询字符串,我在URL中看到的唯一特殊字符是=+和-,我经常使用支付网关,我们会遇到类似这样的奇怪情况。我很早就发现,你可以花三天时间猜测这样的问题,然后通过给他们的支持团队发送一封电子邮件来解决它。试图调试一个错误而看不到错误是非常困难的。我使用Dmitry的代码来确定状态代码。在我下载之前:0。200之后,好的。下载数据:上面的HTML页面。很多时候,当使用自定义错误页面时,状态代码丢失。甚至ASP.NET自定义错误也会屏蔽状态代码。