Я работаю над проверкой ссылок / поиском неработающих ссылок и получаю много ложных срабатываний, после двойной проверки я заметил, что многие коды ошибок возвращают исключения, но на самом деле их можно было загрузить, но в некоторых других случаях код состояния 404, и я могу получить доступ к странице из просмотра.
Итак, вот код, он довольно уродливый, и мне нравится иметь что-то большее, скажем, практично. Все коды состояния находятся в таком большом, если они используются для фильтрации тех, которые я не хочу добавлять к неработающей ссылке, потому что они являются действительными ссылками (я проверил их все). Что мне нужно исправить, так это структура (если это возможно) и как не получить ложные 404.
Спасибо!
try
{
HttpWebRequest request = ( HttpWebRequest ) WebRequest.Create ( uri );
request.Method = "Head";
request.MaximumResponseHeadersLength = 32; // FOR IE SLOW SPEED
request.AllowAutoRedirect = true;
using ( HttpWebResponse response = ( HttpWebResponse ) request.GetResponse() )
{
request.Abort();
}
/* WebClient wc = new WebClient();
wc.DownloadString( uri ); */
_validlinks.Add ( strUri );
}
catch ( WebException wex )
{
if ( !wex.Message.Contains ( "The remote name could not be resolved:" ) &&
wex.Status != WebExceptionStatus.ServerProtocolViolation )
{
if ( wex.Status != WebExceptionStatus.Timeout )
{
HttpStatusCode code = ( ( HttpWebResponse ) wex.Response ).StatusCode;
if (
code != HttpStatusCode.OK &&
code != HttpStatusCode.BadRequest &&
code != HttpStatusCode.Accepted &&
code != HttpStatusCode.InternalServerError &&
code != HttpStatusCode.Forbidden &&
code != HttpStatusCode.Redirect &&
code != HttpStatusCode.Found
)
{
_brokenlinks.Add ( new Href ( new Uri ( strUri , UriKind.RelativeOrAbsolute ) , UrlType.External ) );
}
else _validlinks.Add ( strUri );
}
else _brokenlinks.Add ( new Href ( new Uri ( strUri , UriKind.RelativeOrAbsolute ) , UrlType.External ) );
}
else _validlinks.Add ( strUri );
}