1

我使用Process.Start("firefox.exe", "http://localhost/page.aspx"); 我怎么知道页面是否失败?或者如何通过 HttpWebRequest 知道 HttpWebResponse 页面是否失败?

当我使用

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("somepage.aspx");
HttpWebResponse loWebResponse = (HttpWebResponse)myReq.GetResponse();
Console.Write("{0},{1}",loWebResponse.StatusCode, loWebResponse.StatusDescription);

如何返回错误详细信息?

不需要额外的插件和框架。我只想通过.net选择这个问题

请有任何想法

4

4 回答 4

4

使用 Watin 来自动化 firefox 而不是 Process.Start。它是一个浏览器自动化框架,可让您正确监控正在发生的事情。

http://watin.sourceforge.net/

编辑:另见谷歌网络驱动程序http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html

于 2009-12-14T12:25:58.517 回答
2

如果您正在生成一个子进程,这非常困难,您可能需要使用每个浏览器的特定 API(例如,FF 和 IE 之间的 API 不一样)。

在许多情况下,exe 检测到现有实例并将请求转发到那里并没有帮助(因此您不能信任退出代码,因为该页面甚至还没有在正确的 exe 中被请求)。

就个人而言,我尽量避免为这种情况假设任何特定的浏览器;只需启动网址:

Process.Start("http://somesite.com");

这将使用用户的默认浏览器。您必须希望它出现 - 如果没有大量工作,您无法(可靠且稳健地)从外部检查它。

另一种选择是自己读取数据 ( WebClient.Download*) - 但这可能会涉及复杂的 cookie、登录、用户代理感知等问题。

于 2009-12-14T12:27:42.897 回答
1

Use HttpWebRequest class or WebClient class to check this. I don't think Process.Start will return something if the URL not exists.

于 2009-12-14T12:39:25.947 回答
0

不要以这种形式开始页面。相反,创建一个本地http://localhost:<port>/wrapper.html加载http://localhost/page.aspx,然后是http://localhost:<port>/pass.htmlor http://localhost:<port>/fail.html。localhost:是您的应用程序实现的一个简单的 HTTP 服务器接口。

这个想法是 Javascript在浏览器内部为您提供了一个 API,这比浏览器外部的 API 标准得多。由于 wrapper.html 上的 Javascript 来自与后续资源相同的服务器甚至端口,这应该满足当前浏览器的同源策略。

于 2009-12-14T13:08:18.387 回答