2016-11-08 3 views
1

Ich benutze vb.net und habe eine Handvoll URLs, die nicht gecrawlt werden können. Ich würde wirklich gerne feststellen, wenn ein Crawl eine Null-Antwort zurückgibt, aber scheint ein Problem zu haben herauszufinden, WIE.Abot Crawler - So erkennen Sie Null Antwort

Code:

Public Sub crawler_ProcessPageCrawlCompleted(sender As Object, e As PageCrawlCompletedArgs) 

    pageNumber += 1 
    Try 

     Dim crawledPage As CrawledPage = e.CrawledPage 


     If (Not (crawledPage.HttpWebResponse Is Nothing) And Not (crawledPage.WebException Is Nothing)) Or crawledPage.HttpWebResponse.StatusCode <> HttpStatusCode.OK Then 
      CrawlFailed(e.CrawledPage.ToString, Failed) 
     Else 

      If String.IsNullOrEmpty(crawledPage.Content.Text) Then 
       CrawlFailed(e.CrawledPage.ToString, NoContent) 
      Else 
       StoreContent(e) 
      End If 

     End If 


    Catch ex As Exception 
     RichTextBox1.AppendText(e.CrawledPage.ToString & " - " & ex.Message & vbCrLf) 
    End Try 

End Sub 

ich im setzen Fang-Versuchen diese Ausnahme zu erfassen, aber ich würde wirklich lieber erfassen es in meinem CrawlFailed Unterprogramm zu mit dieser URL etwas tun.

Ich habe versucht, herauszufinden, wie GetResponseStream und Stream.Null zu verwenden, aber kann nicht herausfinden, wie man einen leeren Stream erkennen :(Ich vermisse nur etwas, aber ich habe überall gegoogled Ort und das beste, was ich finden kann, ist dieser Thread:.. crawledPage.HttpWebResponse is null in Abot

jedoch - das nicht wirklich erklären, wie zu erkennen und zu Code gegen das Ergebnis

+0

'GetResponseStream und Stream.Null'? Meinst du dieses Problem (http://stackoverflow.com/questions/22921555/check-null-for-httpwebresponse)? Sie müssen nicht nach Stream.Null suchen, und das macht nichts. Außerdem erkennt HTTP keine "Null" -Antwort, aber Sie können einen leeren Stream erkennen, indem Sie von ihm lesen oder möglicherweise die Length-Eigenschaft verwenden. – usr

+0

Ich habe das gelesen, obwohl ich gerade Ihre abschließende Analyse dazu gesehen habe. Da ich Abot benutze, bin ich mir nicht ganz sicher, wie ich alles, was es mir als Ausgabe gibt, erkenne. Ich bin sicher, ich verpasse etwas aus Ihrer Antwort @ usr, vielleicht können Sie mir helfen, zu verstehen? – Andrew

+0

Ich weiß nichts über Abot, aber wenn 'crawledPage.HttpWebResponse' vom Typ' HttpWebResponse' ist, dann gilt meine Antwort. Lies einfach aus diesem Stream, um den Inhalt zu erhalten und ihn möglicherweise leer zu finden. Wenn Sie diese Arbeit nicht machen können, schreiben Sie den Lesecode. – usr

Antwort

0

hatte ich das gleiche Problem (dotnet-Kern), mit einem fiddler session Ich konnte sehen, dass die Antwort tatsächlich gekommen ist, aber ich habe auch gesehen, dass es lange gedauert hat, bis die Website das Ergebnis zurückgegeben hatVersuchen Sie, config.HttpRequestTimeoutInSeconds auf einen höheren Wert zu setzen. Es löste meine Probleme.