当curl返回200时,VBA GET请求返回404

时间:2013-10-05 00:33:00

标签: excel vba excel-vba curl

我正在使用Excel(因为数据保存在电子表格中)来查看几千个链接的列表并查看它们是否已损坏,AKA是否在我RESTful GET时返回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命令行:

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

导致问题的链接:http://www.stopwaste.org/home/index.asp#

Curl返回200,VBA返回404.同一个链接多次失败,所以我不认为这是“服务器刚刚停机一秒”的情况。我认为我的#字符是一个问题,所以我删除它但得到完全相同的响应。代码成功报告了其他404,因此不知何故会出现误报(或负面,无论你想要调用它)。 “如果查询=”“那么”是没有GET来清空URLS,VBA不喜欢那些。

我在这里很难过,并希望有人能够帮助我。提前谢谢!

3 个答案:

答案 0 :(得分:3)

为什么不使用.FollowHyperlink检查网址是否存在?

见这个例子。

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

<强>截图:

enter image description here

答案 1 :(得分:1)

删除了'#'字符,效果很好。

enter image description here

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

enter image description here

答案 2 :(得分:0)

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

 zipService.send ""

另外,请尝试在每个网址

后重置zipService
Set zipService = Nothing

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