设置
服务器生成位于https://myserver.com/logs/
的日志文件。 /logs
目录受.htaccess
文件密码保护。尝试访问https://myserver.com/logs/
将提示用户输入用户名和密码,以便查看目录列表。
我正在尝试做什么:
我正在MS Excel中编写VBA脚本以从我的服务器下载日志文件。日志文件server.log
位于/logs
目录中。我想将文件下载到C:\Downloads\server.log
的本地驱动器。最后我想编写一个for循环来下载多个文件,但我只想现在只下载一个。
我遇到的问题:
我收到<h1>Access Denied</h1>
作为回复邮件。我没有看到任何文件下载。奇怪的是,虽然...昨天它会下载文件,但只有在我访问它并通过IE打开它之后。然后每个后续下载工作正常。但是今天这不再适用了。
我下载文件的功能:
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Function downloadLog()
Dim URL As String
Dim DestFile As String
Dim Res As Long
URL = "https://myserver.com/logs/server.log"
DestFile = "C:\Downloads\server.log"
Res = URLDownloadToFile(0&, URL, DestFile, 0&, 0&)
If Res = 0 Then
MsgBox "Success"
Else
MsgBox "Failure"
End If
End Function
请帮助......我完全没有想法。
答案 0 :(得分:2)
我在其他地方找到了答案。我在这里发布它,以便遇到同样问题的其他人可以使用下面相同的功能来完成同样的事情。
首次尝试时,系统会提示您输入用户名和密码,但其他所有尝试都是无缝的。就像我想要的那样工作。
Function FetchFile(sURL As String, sPath)
Dim oXHTTP As Object
Dim oStream As Object
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
Set oStream = CreateObject("ADODB.Stream")
'Application.StatusBar = "Fetching " & sURL & " as " & sPath
oXHTTP.Open "GET", sURL, False
oXHTTP.send
If (oXHTTP.Status = 200) Then
With oStream
.Type = 1 'adTypeBinary
.Open
.Write oXHTTP.ResponseBody
.SaveToFile sPath, 2 'adSaveCreateOverWrite
.Close
End With
FetchFile = True
Else
FetchFile = False
End If
Set oXHTTP = Nothing
Set oStream = Nothing
'Application.StatusBar = False
End Function
答案 1 :(得分:1)
之前我遇到过类似的问题,这是解决方案:
使用ADODB.Stream对象
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
Set oStream = CreateObject("ADODB.Stream")
答案 2 :(得分:0)
我没有可以测试代码的类似网站,但这里有些值得尝试的东西。 Microsoft提供了一个解决方案,用this site在InternetOpen上的标题为“由调用WinInet或Urlmon函数的对象打开的URL”部分进行身份验证。他们建议使用WinINet库。
首先,调用InternetConnect获取HINTERNET句柄。
接下来,使用WinINet
选项致电HttpOpenRequest,提供INTERNET_DEFAULT_HTTPS_PORT
和lpszUsername
。
使用HttpSendRequest和InternetReadFile发出文件网址请求。
如果一切按计划进行,您可以拨打Here来获取数据。
{{3}}是使用WinINet进行身份验证的示例,不确定哪种符合您的需求。