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

我正在使用Excel(因为数据保存在电子表格中)来查看几千个链接的列表,看看它们是否被破坏,当我使用RESTful获取它们时,AKA是否返回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的,所以不知何故有创build误报(或否定性,无论你想调用它)的情况。 “如果查询=”“那么”是这样,没有GET空URLS,VBA不喜欢那些。

我非常难过,希望有人能帮助我。 提前致谢!

为什么不使用.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 

截图:

在这里输入图像说明

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

在这里输入图像说明

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

在这里输入图像说明

尝试改变这一行以包含双引号:

  zipService.send "" 

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

 Set zipService = Nothing 

自从你指出一个具体的URL以来,我认为excel版本适用于你的一些URL。