从URL下载文件会抛出状态代码406

时间:2017-11-14 10:27:42

标签: excel vba excel-vba winhttprequest

大家好我有这个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

1 个答案:

答案 0 :(得分:0)

  

406状态代码表示虽然服务器理解并处理了请求,但响应是客户端无法理解的形式。作为请求的一部分,客户端发送指示它可以使用的数据类型的标头,并且当响应属于不在该列表中的类型时,返回406错误。

EG。如果您要求服务器发送 GIF图片,但它只能发送纯文本 PNG图片,您将收到406状态代码含义你的服务器理解你的问题,但无法实现它。

因此,您应该包含一个Accept标头,指定您希望服务器将哪种类型的媒体发送到您的客户端(您的VBA),该类型应该是您的服务器实际可以提供的类型。

如何发送标题的示例:

WinHttpReq.SetRequestHeader "Content-Type", "text/xml;charset=utf-8"
WinHttpReq.SetRequestHeader "Accept", "text/xml" 

当然,没有人可以告诉您哪种媒体类型是正确的,因为我们不知道您的服务器以及它可以提供哪种类型的媒体。