我正在使用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不喜欢那些。
我在这里很难过,并希望有人能够帮助我。提前谢谢!
答案 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
<强>截图:强>
答案 1 :(得分:1)
删除了'#'字符,效果很好。
在Fiddler中我看到浏览器根本没有发送'#'字符:
答案 2 :(得分:0)
尝试更改此行以包含双引号:
zipService.send ""
另外,请尝试在每个网址
后重置zipServiceSet zipService = Nothing
我假设excel版本适用于您的某些网址,因为您指出了一个特定的网址。?。?