2017-12-21 6 views
1

Ich möchte prüfen, ob die URL eine gültige Seite hat (nicht 404, nur 200).Überprüfen, ob die URL eine gültige Seite hat

-Code Ich habe versucht:

Dim request As HttpWebRequest = DirectCast(WebRequest.Create(myurl), HttpWebRequest) 
request.KeepAlive = True 
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse) 
If response.StatusCode = HttpStatusCode.OK Then 
    MsgBox("OK") 
End If 

Doch jede URL, die ich verlässt OK-Antwort eingeben, auch wenn ich http://mywebsite.com/blahblah eingeben.

Es ist nicht gleich auf allen Websites (funktioniert gut mit example.com), aber es funktioniert nicht auf meiner Website. Warum?

In meinem Browser sehe ich 404-Seite, aber Code sagt, es OK ist.

Edit: Nur um zu erwähnen, dass meine Website Cloudflare auf.

+0

Was Sie tun, ist in Ordnung, übrigens 'http: // mywebsite.com/blahblah' eine gültige Seite ist und ok zurück ... Auch eine 404 bedeutet einfach die Seite ist nicht auf dem Server gefunden, Der Status wird ok zurückgegeben, auch wenn eine Seite nicht gefunden wurde und der Server erreicht wurde und geantwortet hat ... – Codexer

+0

Oh, das macht Sinn. Kann ich irgendwie wissen, ob die Seite auf dem Server verfügbar ist? – bananamen

+0

Was Sie tun könnten, ist lesen Sie die Webresponse in einem Streamreader, die Seiten Code und dann überprüfen Sie es für eine 404 ... – Codexer

Antwort

0

dieses ausprobieren und sehen, ob es für Sie die Arbeit ... Wie in meinem Kommentar des oben erwähnt:

A 404 bedeutet nur die Seite auf dem Server nicht gefunden wird, wird Status ok auch zurück, wenn eine Seite nicht gefunden wird und wurde der Server erreicht und reagierte

Public Class WebPage 
     Public Property PageSource As String = String.Empty 
     Public Property Status As HttpStatusCode = HttpStatusCode.NotFound 
     Public Property WebError As String = String.Empty 
    End Class 

    Public Shared Function GetWebPage(ByVal Website As String) As WebPage 
    Dim web As New WebPage() With {.Status = HttpStatusCode.OK} 
    Try 
     Using source As New System.Net.WebClient() 
      web.PageSource = source.DownloadString(Website) 
     End Using 

     Return web 
    Catch exweb As WebException 
     If exweb.Status = WebExceptionStatus.ProtocolError AndAlso exweb.Message.Contains("404") Then 
      web.Status = HttpStatusCode.NotFound 
     Else 
      web.Status = HttpStatusCode.BadRequest    
     End If 
     web.WebError = exweb.Message 
    Catch ex As Exception 
     web.Status = HttpStatusCode.NotFound 
     web.WebError = ex.Message 
    End Try 

    Return web 
End Function 

Verwendung Beispiel

Dim webObj As WebPage = GetWebPage("THESITE") 
If Not String.IsNullOrEmpty(webObj.WebError) Then 
    MessageBox.Show(webObj.WebError) 
ElseIf webObj.Status = HttpStatusCode.OK Then 
    MessageBox.Show("OK") 
End If 
+0

Dies würde funktionieren, es wird leider nicht helfen, wenn die Seite von Cloudflare geschützt ist. – Pure

+0

@Pure das ist eine einfache Änderung des Codes, aber Benutzer hat nichts über Cloudflare erwähnt. – Codexer

+0

@Pure Ich werde meinen Kommentar oben ändern, der Benutzer erwähnte das in einem *** Kommentar *** habe ich nicht gesehen. Um diesen Schutz zu umgehen, würde ich hier nicht hinstellen, der Benutzer kann sich das ansehen ... – Codexer

0

Dies wird tun, was Sie wollen.

Function URLExists(url As String) As Boolean 
    Dim Request As Object 
    Dim ff As Integer 
    Dim rc As Variant 

    On Error GoTo EndNow 
    Set Request = CreateObject("WinHttp.WinHttpRequest.5.1") 

    With Request 
     .Open "GET", url, False 
     .send 
     rc = .StatusText 
    End With 
    Set Request = Nothing 
    If rc = "OK" Then URLExists = True 

    Exit Function 
EndNow: 
End Function 
Verwandte Themen