【问题标题】:Phasing website directory/ folder name vb.net分阶段网站目录/文件夹名称 vb.net
【发布时间】:2021-06-22 17:54:23
【问题描述】:

我有一个网站,其中包含我希望 vb.net 阶段(检查)这些文件夹的存在。显然,如果目录存在,则在这种情况下不起作用,所以我想出了以下代码。

     Dim PhaseUri As New System.Uri(http://www.example.com/My_Folder)
                    Dim PhaseURL As String = PhaseUri.Host.ToString

                    If My.Computer.Network.IsAvailable AndAlso My.Computer.Network.Ping(PhaseURL, 1000) Then
Else
End If

代码通过从整个 (http://www.example.com/My_Folder) 中提取它来检查 www.example.com 是否存在,它尽可能接近,但是如果 www.example.com 存在但 My_Folder dosnt 则我有问题。基本上我上面的代码让我尽可能接近,然后相信其余部分也会存在。

如何使用少于 100,000 行和尽可能少的复杂代码来分阶段/验证/检查实体 http://www.example.com/My_Folder 的存在?

【问题讨论】:

  • 您可以发出 HEAD 请求,但服务器必须响应此类请求,必须启用目录列表或目录包含默认文档。否则,即使目录存在,也会出现异常。如果您有 FTP 访问权限,您可以请求目录列表(NLISTLIST)并解析它。

标签: vb.net web url directory uri


【解决方案1】:

仅当您的“文件夹”是网页或包含默认文档时才有效。

适用于页面,而不是文件夹

public function IsFolderOnline(url as string) as boolean
    try
        dim wc as new system.net.webclient()
        wc.downloadstring(url)
        return true
    catch ex as exception
        return false
    end try
end function

像这样使用它:

dim IsItOnline as boolean = IsFolderOnline("http://example.org/folder")

无法获取文件夹内的所有页面

您必须检查每个页面的 href 元素才能找到新的 url。它只会找到有网络链接的网址。

Webclient.Downloadstring() 下载页面的 html。

使用此代码从页面中检索所有 url

  ' Finding urls in the page
    Dim FoundUrls As New List(Of String)

    Dim strRegex As String = "<a[^<>]*>"
    Dim myRegex As New Text.RegularExpressions.Regex(strRegex, System.Text.RegularExpressions.RegexOptions.None)
    For Each myMatch As Text.RegularExpressions.Match In myRegex.Matches(html)
        If myMatch.Success Then
            Dim strRegex2 As String = "href=""[^""]*"""
            Dim myRegex2 As New Text.RegularExpressions.Regex(strRegex, System.Text.RegularExpressions.RegexOptions.None)
            For Each myMatch2 As Text.RegularExpressions.Match In myRegex.Matches(myMatch.Value)
                If myMatch2.Success Then
                    Dim value As String = Split(Split(myMatch2.Value, """", 2).Last, """", 2).First

                    If value.ToLower.StartsWith("http://" & DomainName.ToLower) Then
                        FoundUrls.Add(value)
                    End If

                    If value.ToLower.StartsWith("https://" & DomainName.ToLower) Then
                        FoundUrls.Add(value)
                    End If


                    If value.ToLower.StartsWith("/") Then
                        FoundUrls.Add(Protocol & DomainName & value)
                    Else
                        If Not value.Contains(":") Then
                            FoundUrls.Add(Protocol & DomainName & "/" & value)
                        End If
                    End If


                End If
            Next
        End If
    Next

您可能想要删除包含文件的链接

  'Remove unsupported urls
        Dim UnsupportedExtensions() As String = {".css", ".ico", ".xml", ".axd", ".js", ".zip", ".rar", ".7z", ".tar", ".jar", ".pdf", ".jpg", ".jpeg", ".png", ".bmp", ".mp4", ".mov", ".mpeg", ".gif"}
        For Each url In FoundUrls.ToList
            For Each UnsupportedExtension In UnsupportedExtensions
                If url.ToLower.EndsWith(UnsupportedExtension) Then
                    FoundUrls.Remove(url)
                    Exit For
                End If
            Next
        Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2011-10-18
    相关资源
    最近更新 更多