Internet Explorer предоставляет доступный COM-интерфейс, который вы можете использовать. Если вам действительно нужно. Я бы рекомендовал против этого - он сравнительно медленный, подвержен ошибкам, громоздок и ресурсоемок.
То, что решает вашу проблему более элегантно, это использование WinHTTPRequest
. В вашем проекте укажите «Microsoft WinHTTP Services, версия 5.1», а затем продолжайте так:
Dim HttpRequest As New WinHttp.WinHttpRequest
Dim TargetUrl As String
Dim TargetFile As String
Dim FileNum As Integer
TargetFile = "C:\foo.doc"
TargetUrl = "http://www.websiteurl.com"
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send
If HttpRequest.Status = 302 Then
TargetUrl = HttpRequest.GetResponseHeader("Location")
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send
If HttpRequest.Status = "200" Then
FileNum = FreeFile
Open TargetFile For Binary As #FileNum
Put #FileNum, 1, HttpRequest.ResponseBody
Close FileNum
Debug.Print "Successfully witten " & TargetFile
Else
Debug.Print "Download failed. Received HTTP status: " & HttpRequest.Status
End If
Else
Debug.Print "Expected Redirect. Received HTTP status: " & HttpRequest.Status
End If
Жесткое кодирование "C:\foo.doc"
, конечно, не имеет особого смысла. Я бы использовал имя файла, которое сервер предоставляет в заголовках ответов ("Content-Type"
или "Content-Disposition"
, в зависимости от того, что вы ожидаете).