asp.net 验证URL是否存在cloudflare障碍

h79rfbju  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(163)

我使用下面的函数来确定URL是否存在:

Public Function URLExists(ByVal url As String) As Boolean
    Dim webRequest As System.Net.WebRequest = System.Net.WebRequest.Create(url)
    webRequest.Method = "HEAD"
    Try
        Dim response As System.Net.HttpWebResponse = CType(webRequest.GetResponse, System.Net.HttpWebResponse)
        If (response.StatusCode.ToString = "OK") Then
            Return True
        End If

        Return False
    Catch
        Return False
    End Try
End Function

在大多数情况下,这是正常的,但是当一个网站通过cloudflare托管时,它不会返回页面标题,这意味着即使目标URL确实存在,该函数也会返回false。
例如,您可以使用https://ezclix.club/m/1125,它将重定向到warriorplus.com网站(其中有cloudflare),然后最终重定向到https://ezclix.club/index.asp作为最终目标(确实存在),但一旦遇到启用了cloudflare的warriorplus,该函数将返回false。

zzlelutf

zzlelutf1#

您可以选择检查请求URI是否与响应URI不同。如果不同,则递归检查响应URI。
例如:

' Imports System.Net
Public Function URLExists(url As String) As Boolean
    Dim request = WebRequest.Create(url)
    request.Method = "GET"
    Try
        Dim response = DirectCast(request.GetResponse, HttpWebResponse)
        If (request.RequestUri <> response.ResponseUri) Then
            Return URLExists(response.ResponseUri.ToString())
        End If
        Return response.StatusCode = HttpStatusCode.OK
    Catch
        Return False
    End Try
End Function

相关问题