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

当curl返回200时,VBA GET请求返回404,vba,excel,curl,Vba,Excel,Curl,我正在使用Excel(因为数据保存在电子表格中)浏览包含数千个链接的列表,看看它们是否损坏,也就是说,当我使用RESTful获取它们时,它们是否返回404。但是,我的VBA代码返回的不是使用curl时返回的内容,在本例中,curl是正确的(页面存在)。下面是我的代码和引起问题的链接(它在一个子例程中,不用担心): curl命令行: curl –sL –w “%{http_code} \n” http://URLHERE” –o /dev/null 导致问题的链接: Curl返回200,VBA返

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

curl命令行:

curl –sL –w “%{http_code} \n” http://URLHERE” –o /dev/null
导致问题的链接:

Curl返回200,VBA返回404。同一个链接已经失败了好几次,所以我不认为这是“服务器刚刚停机一秒钟”的情况。我认为这是我的#角色的问题,所以我删除了它,但得到了完全相同的响应。代码成功地报告了其他404,因此不知何故出现了一种情况,即产生了误报(或否定,无论你想怎么称呼它)。“If query=”“Then”这样就不会出现空URL,VBA不喜欢这些


我在这里被难住了,希望有人能帮助我。提前谢谢

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

 zipService.send ""

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

Set zipService = Nothing


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

为什么不使用
。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中,我看到浏览器根本没有发送“#”字符:


我将结合所有这些答案(双重、三重检查),但你的答案最有帮助,因为它给了我另一种方法。
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