良いリンク検証APIを知っている人はいませんか?私はどのような種類のWebクローラーも探しているわけではなく、完全なページまたは単一のリンクを検証するだけのものです。私は現時点では解決できない鉱山でいくつかの問題を抱えているので、私は1つを探してきました。.NET Link Validator API?
主要な問題のいくつかは以下のとおりです。
- いくつかの非同期Webリクエストは、それがリダイレクト
I'LLだ時に404を取得する多くの偽陽性
第一の方法は、検証
private void urlCheck(Link strUri)
{
try
{
Uri uri = new Uri(strUri.URL ,
(strUri.URL.StartsWith("/")) ?
UriKind.Relative : UriKind.Absolute);
if(!uri.IsAbsoluteUri)
uri = new Uri(_page.HttpDomain + uri);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.UserAgent =
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0)";
request.AllowAutoRedirect = true;
request.AllowWriteStreamBuffering = true;
request.SendChunked = true;
request.UnsafeAuthenticatedConnectionSharing = true;
request.KeepAlive = false;
request.Referer = "http://www.google.ca/";
// default : WebRequest.DefaultWebProxy
request.Proxy = null;
request.Timeout = 20000;
//do not revalidate this
WebPageCollection.DoNotRevalidateLinks.Add(strUri);
request.BeginGetResponse(new AsyncCallback(getResponseCallback) ,
request);
_webRequest++;
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
第2の方法は、2つのインクリメント変数がカウントの両方が対等であることを確認し、そして多くの場合になっているコールバック
private void getResponseCallback(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
string strUri = request.Address.ToString();
Link href = new Link(strUri);
href.URLKind = urlKind;
href.URLType = UrlType.External;
href.URLState = UrlState.Valid;
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if(response.StatusCode == HttpStatusCode.Redirect)
{
//TODO: Redirects
href.URLState = UrlState.Redirect;
}
}
catch(WebException wex)
{
href.URLState = UrlState.Broken;
}
_page.Links.Add(href);
_webRequestComplete++;
request.EndGetResponse(result);
}
で開始することです彼らはそうではありませんし、私は無限ループで終わります。
問題の詳細を指定する必要があります。最初の(非同期が返ってこない)場合は、修正するのは簡単ですが、タイムアウトしてからタイムアウトした後に戻ってこない場合は無効とみなします。偽陽性については、偽陽性が何であるかを正確に特定する必要があります。リダイレクトされている404については、301/302の応答を得るか、そうでないかを理解する方法がわかりません。あなたは良い答えを得るためにもっと精緻化する必要があります。 – casperOne
私は、私のWeb要求でタイムアウトの遅延があっても、私のデリゲートメソッドは決して上がらないことを意味します。私は、少なくとも私はタイムアウトコードで応答を返す必要がありますと信じています。しかし、そうではありません。偽陽性とは、リダイレクトやページが壊れている(404)と記述されているが、実際には有効であると断言されたページのことです。あなたがより多くの情報を必要とするかどうか私に教えてください。 –