gpt4 book ai didi

c# - 检查远程/外部网页是否可用并获取状态码

转载 作者:行者123 更新时间:2023-11-30 20:20:30 26 4
gpt4 key购买 nike

我知道有很多关于使用 System.Net.WebRequest 检查远程网页是否可用的问题和答案,但我还没有发现这些方法 100% 对我的情况有用。

我需要检查页面是否可用,是否返回 404 或 500 错误,如果有重定向,那么我想跟踪它们直到找到工作页面。如果远程页面需要身份验证(401 未授权)我想知道,因为在某些情况下这可能是可以接受的。

当发出请求并且远程服务器返回内部服务器错误 (500) 时,WebRequest 引发异常。

我还发现 301 重定向也会引发异常,尽管在我的情况下我想检查重定向是否指向有效页面。

是否有任何其他方法来检查页面是否存在并最好获取实际的 HTTP 状态代码或仅在获取 header 时出错(即无效的域名等)时才抛出异常?

这就是我现在做的,但还不够好......

protected bool URLExists(string url)
{
bool result = false;

try
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Timeout = 1200;
webRequest.Method = "GET";
//webRequest.AllowAutoRedirect = true;
//webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36";

HttpWebResponse response = null;

try
{
response = (HttpWebResponse)webRequest.GetResponse();
//result = true;

int statusCode = (int)response.StatusCode;
if (statusCode >= 100 && statusCode < 400) //Good requests
{
return true;
}
else if (statusCode >= 500 && statusCode <= 510) //Server Errors
{
return false;
}
}
catch (WebException webException)
{

}
finally
{
if (response != null)
{
response.Close();
}
}
}
catch (Exception ex)
{

}

return result;
}

最佳答案

想想这段代码,您需要获取 200 响应状态代码以确保网页可用,如果发生重定向,则遵循端点 URL 响应状态代码。

public static bool URLExists(string url)
{
HttpStatusCode result = default(HttpStatusCode);

var request =(HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.Method = "HEAD";
try
{
using (var response = request.GetResponse() as HttpWebResponse)
{
if (response != null)
{
if (response.StatusCode == HttpStatusCode.OK)
return true;
if (response.StatusCode == HttpStatusCode.Redirect)
{
string uriString = response.Headers["Location"];
return URLExists(uriString);
}

response.Close();
}
}
return false;
}
catch (WebException e)
{
using (WebResponse response = e.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
return false;
}
}
}

还好吗? ;)

关于c# - 检查远程/外部网页是否可用并获取状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com