从URL下载文件会引发状态码406

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

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

例如。 如果您要求服务器发送一个GIF图片 ,但它只能发送纯文本PNG图片,您将收到一个406状态代码,这意味着您的服务器可以理解您的问题,但无法完成。

所以你应该包含一个Accept标头,指定你想要服务器发送给你的客户端(你的VBA)的媒体types,这个types应该是你的服务器实际可以提供的types。

示例如何发送标题:

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

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