使用POST / GET和标头(使用VBA)使用WINHTTP下载文件

时间:2017-02-06 03:41:46

标签: html vba http-headers

作为对上一个问题的跟进:Automating File Download of a link that looks like this: https://www.domain.com/TableData/TableA.csv

我正在学习更多关于使用POST和GET发送的标题 - 但我不知道我需要知道什么。

到目前为止,我的代码都是在下载文件时使用的,但是上一个问题的问题仍然存在。当我在执行后打开下载的文件时,它会填充登录页面的html,就好像凭据不能通过POST登录一起工作。我怀疑我的问题在于strAuthenticate字符串,但我不确定。

Sub SaveFileFromURL()

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

fileUrl = "https://www.ncci.com/Manuals/RateTableData/State/XX/XX.csv '%20
filePath = "C:\Apps\information.csv"

myuser = "xxxxxx"
mypass = "xxxxxx"

strAuthenticate = "sm_userid=xxxxx&sm_password=xxxxxx"

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

WHTTP.Open "POST", "https://www.ncci.com", False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send strAuthenticate
x = WHTTP.getResponseHeader("Set-Cookie")

MsgBox x
WHTTP.Open "GET", fileUrl, False
WHTTP.setRequestHeader "Cookie", x
WHTTP.send



FileData = WHTTP.responseBody
Set WHTTP = Nothing

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

1 个答案:

答案 0 :(得分:0)

非常感谢RYAN WILDRY!解决了问题。

我需要设置两个特定的Cookie并更改实际的登录链接 - 使用主域名无效。

对于有一天发现此帖子的其他人 - 使用开发人员工具查看Cookie并找到您需要传递登录的Cookie。我个人通过弹出一个响应标题的消息框来测试它们,我将其与手动登录时通常会得到的响应标题进行比较。