Проверка ссылок; как избежать ложных срабатываний - PullRequest
0 голосов
/ 10 июня 2010

Я работаю над проверкой ссылок / поиском неработающих ссылок и получаю много ложных срабатываний, после двойной проверки я заметил, что многие коды ошибок возвращают исключения, но на самом деле их можно было загрузить, но в некоторых других случаях код состояния 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 );
}

1 Ответ

1 голос
/ 10 июня 2010

Вы должны добавить заголовок UserAgent, так как многие веб-сайты требуют их.

...