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