【问题标题】:Verify URL exists cloudflare snag验证 URL 是否存在 cloudflare 障碍
【发布时间】:2022-11-10 16:48:41
【问题描述】:

我正在使用下面的函数来确定 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 .

【问题讨论】:

  • 工作流程不同。您可以做的事情是检查 ResponseUri 是否与 RequestUri 不同,如果不同,则在 ResponseUri 上递归返回 URLExists。
  • @David,我不太明白你的建议。您能否使用我在示例中提供的 URL 提供一个工作示例?
  • If (webRequest.RequestUri <> response.ResponseUri) Then : Return URLExists(response.ResponseUri) : End If
  • 用换行符替换 :。 StackOverflow 仅支持 cmets 中的 mini-markdown。
  • @大卫,对不起。我仍然不明白我必须在代码中的哪个位置插入您的示例

标签: asp.net vb.net


【解决方案1】:

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

例如:

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)
        End If
        Return response.StatusCode.ToString = "OK"
    Catch
        Return False
    End Try
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2016-07-19
    相关资源
    最近更新 更多