我们有一个工具可以检查给定的URL是否可用。如果一个给定的URL是可用的,我们软件的另一部分可以从中筛选出内容。
以下是我用于检查URL是否可用的代码。
这段代码在大多数网站上都能正常运行,但是在一个由Apache托管的特定网站上,我遇到了一个Web异常,错误信息如下:"远程服务器返回错误:(403) 禁止访问"。进一步检查发现WebException对象中有以下细节:
状态="协议错误" 状态描述="不良行为"
这是请求头 "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5 Host: scenicspares.co.uk Connection: Keep-Alive"。
这是响应头 "Keep-Alive: timeout=4, max=512 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html Date: Thu, 13 Jan 2011 10:29:36 GMT Server: Apache"。
我使用vs2008中的观察工具提取了这些标头。所使用的框架是3.5。
以下是我用于检查URL是否可用的代码。
public static bool IsLiveUrl(string url)
{
HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5";
webRequest.CookieContainer = new CookieContainer();
WebResponse webResponse;
try
{
webResponse = webRequest.GetResponse();
}
catch (WebException e)
{
return false;
}
catch (Exception ex)
{
return false;
}
return true;
}
这段代码在大多数网站上都能正常运行,但是在一个由Apache托管的特定网站上,我遇到了一个Web异常,错误信息如下:"远程服务器返回错误:(403) 禁止访问"。进一步检查发现WebException对象中有以下细节:
状态="协议错误" 状态描述="不良行为"
这是请求头 "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5 Host: scenicspares.co.uk Connection: Keep-Alive"。
这是响应头 "Keep-Alive: timeout=4, max=512 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html Date: Thu, 13 Jan 2011 10:29:36 GMT Server: Apache"。
我使用vs2008中的观察工具提取了这些标头。所使用的框架是3.5。
webRequest.Method = "GET"; webRequest.UserAgent = "Foo"; webRequest.Accept = "text/html";
不同的服务器可能需要不同的设置。 - swdev