从URL HTTPS下载xls文件

时间:2018-08-23 11:26:07

标签: excel vba url https

我正在尝试使用VBA从URL要求密码的位置下载股票文件。

Sub SaveFileFromURL()

Dim FileNum As Long
Dim FileData() As Byte
Dim WHTTP As Object

mainUrl = "https://wmsukprd.ab-inbev.com/core/Default.html"
fileUrl = "https://wmsukprd.ab- 
inbev.com:30004/SupplyChainAdvantage/WAAdvantageDashboard
/ReportPageExport.ashx/ExportDownload? 
id=1503&WH_ID=24&Item_Number=%25&Location_ID=%25&hu_id=%25&lot_number=
%25&serial_number=%25&_ww_export_id=d231eb2c-64ad-4ce7-82ca-d53c14ae1f69"

filePath = "C:\Users\barbeavi\Desktop\Samlesbury\Stock.csv"

myuser = "my login"
mypass = "******"

strAuthenticate = "start-url=%2F&user=" & myuser & "&password=" & mypass & 
"&switch=Log+In"

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

WHTTP.Open "POST", mainUrl, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.Send strAuthenticate

'GET direct file url
WHTTP.Open "GET", fileUrl, False
WHTTP.Send

FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

'Save the file
FileNum = FreeFile
Open filePath For Binary Access Write As #FileNum
    Put #FileNum, 1, FileData
Close #FileNum

MsgBox "File has been saved!", vbInformation, "Success"

End Sub

我收到消息错误

  

运行时错误'-2147012866(80072efe)':
  与服务器的连接异常终止

在以下行上:

WHTTP.Send strAuthenticate

问题可能出在HTTP S 上,因为我在不安全的页面上尝试了相同的代码,并且在这里可以正常工作。

1 个答案:

答案 0 :(得分:0)

如果您在Windows 7或8上遇到此问题,则很可能与VBA使用SSL协议发送数据有关,该数据被仅接受TLS的服务器丢弃。

一段时间以来,我一直在Windows 7客户端上遇到TLS问题,并根据下面概述的Microsoft文章进行了一轮修复:

步骤1。获取Microsoft更新KB3140245: 下载相关的(32位或64位用户的Windows版本) Microsoft Security Protocol Update并安装(如果尚未安装)。

步骤2。下载Microsoft Easy Fix:  从以下位置下载Microsoft“轻松修复” Microsoft Support Article,然后执行以将TLS 1.1+设置为默认值。

但是,后来,我又遇到了类似的问题,这使我意识到Microsoft页面上的修复工具不会设置所有注册表项(缺少SChannel注册表项)。因此,我设法通过设置“ Internet选项”和“ SChannel”将一些脚本放在一起以进行完整修复。需要添加TLS1.1 / 1.2的SChannel注册表项,以默认情况下为Winhttp设置启用TLS。

WinHttp键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
==> DWORD DefaultSecureProtocols=0x00000A00 (32-bits and 64-bits)

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
==> DWORD DefaultSecureProtocols=0x00000A00 (64-bits)

频道键:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client 
==> DWORD DisabledByDefault=0x00000000

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
==> DWORD DisabledByDefault=0x00000000

全面修复:Microsoft修补程序不能修复所有注册表项,以更新WinHTTP默认值并跳过SChannel项。因此,如果两步修复abpve无法解决问题,则该github项目包含用于下载和应用上面列出的所有必需的注册表修改的powershell脚本,并且可能对更全面的一次性修复有所帮助:Winttp-TLS