大家好我有这个sub我想从URL下载文件,但每次运行时WinHttpReq.Status
都包含406
。
Sub DownloadFile()
Dim myURL As String
myURL = "https://YourWebSite.com/?your_query_parameters"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send
myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile "C:\file.csv", 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
End Sub
答案 0 :(得分:0)
406状态代码表示虽然服务器理解并处理了请求,但响应是客户端无法理解的形式。作为请求的一部分,客户端发送指示它可以使用的数据类型的标头,并且当响应属于不在该列表中的类型时,返回406错误。
EG。如果您要求服务器发送 GIF图片,但它只能发送纯文本和 PNG图片,您将收到406状态代码含义你的服务器理解你的问题,但无法实现它。
因此,您应该包含一个Accept
标头,指定您希望服务器将哪种类型的媒体发送到您的客户端(您的VBA),该类型应该是您的服务器实际可以提供的类型。
如何发送标题的示例:
WinHttpReq.SetRequestHeader "Content-Type", "text/xml;charset=utf-8"
WinHttpReq.SetRequestHeader "Accept", "text/xml"
当然,没有人可以告诉您哪种媒体类型是正确的,因为我们不知道您的服务器以及它可以提供哪种类型的媒体。