4

我正在使用 Excel(因为数据保存在电子表格中)浏览数千个链接的列表,看看它们是否损坏,也就是当我 RESTful 获取它们时它们是否返回 404。但是,我的 VBA 代码返回的不是我使用 curl 时的内容,在这种情况下 curl 是正确的(页面存在)。这是我的代码,其中包含导致问题的链接(它在子例程中,不用担心):

For i = StartRow To EndRow
    Let copyRange = "H" & i
    Let writeRange = "T" & i
    query = Worksheets("Sheet1").Range(copyRange).Value
    If query = "" Then

    Else
        With zipService
            .Open "GET", query, False
        End With
        zipService.send
        zipResult = zipService.Status
        Worksheets("Sheet1").Range(writeRange).Value = zipResult
    End If

Next i

卷曲命令行:

curl –sL –w “%{http_code} \n” http://URLHERE” –o /dev/null

造成麻烦的链接:http: //www.stopwaste.org/home/index.asp#

Curl 返回 200,VBA 返回 404。同一个链接已经失败了好几次,所以我不认为这是“服务器刚刚关闭一秒钟”的情况。我认为我的 # 字符有问题,所以我删除了它,但得到了完全相同的响应。该代码成功地报告了其他 404,所以不知何故,有一种情况会产生误报(或否定,无论你想调用它)。“如果查询 =”“那么”是为了没有 GET 到空 URL,VBA 不喜欢这些。

我在这里很困惑,希望有人能够帮助我。提前致谢!

4

3 回答 3

3

为什么不使用.FollowHyperlink来检查 URL 是否存在?

请参阅此示例。

Sub Sample()
  Dim url As String

  url = "http://www.stopwaste.org/home/index.asp#"
  Debug.Print url, CheckIfURLExists(url)

  url = "http://www.Google.com"
  Debug.Print url, CheckIfURLExists(url)

  url = "http://www.Goo00000gle.com"
  Debug.Print url, CheckIfURLExists(url)
End Sub

Function CheckIfURLExists(ByVal sLink As String) As Boolean
    On Error Resume Next
    ThisWorkbook.FollowHyperlink (sLink)
    CheckIfURLExists = Err.Number = 0
End Function

截屏:

在此处输入图像描述

于 2013-10-05T05:50:30.453 回答
1

删除了“#”字符,它工作得很好。

在此处输入图像描述

在 Fiddler 中,我看到浏览器根本没有发送“#”字符:

在此处输入图像描述

于 2013-10-05T10:17:40.430 回答
0

尝试更改此行以包含双引号:

 zipService.send ""

另外,尝试在每个 URL 之后重置 zipService

Set zipService = Nothing

我假设 excel 版本适用于您的某些 URL,因为您指出了一个特定的 URL.?.?

于 2013-10-05T04:36:02.707 回答