1

大家好,我有这个子我想从 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
4

1 回答 1

0

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

例如。如果您要求服务器发送GIF 图片,但它只能发送纯文本PNG 图片,您将收到 406 状态码,表示您的服务器理解您的问题但无法完成。

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

示例如何发送标头:

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

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

于 2017-11-14T10:47:56.593 回答