У меня есть массив URL-ссылок на файлы. Эти файлы могут быть загружены только через соединение через прокси. Для этого я использую следующую функцию в цикле (а также для получения http-кода веб-страницы для получения массива файлов):
Public Function GetRequest(ByVal UrlStr As String, Optional ByVal ProxyStr As Boolean, Optional SaveFilePath As String) As Object
dim XMLHTTP As Object
Dim oStream As Object
Dim xmlDoc As New HTMLDocument
Dim ret As String
On Error GoTo 0
k= 0
0:
Set XMLHTTP = Nothing
Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
'here there was a cycle to get working proxy, I threw it off when paste code to the forum
'the result of cycle was ProxyString, e.g. "165.227.23.166:8080"
XMLHTTP.setProxy 1, ProxyString
'the function is working in 2 modes:
' mode 1 (SaveFilePath="") - to get http code of the web page (also via proxy) - no problems with that part
' mode 2 (SaveFilePath<>"") - to download file from UrlStr to SaveFilePath
With XMLHTTP
If SaveFilePath = "" Then
'------------ here is mode 1, no problems ---------------------------------
.Open "GET", UrlStr, True
.setRequestHeader "Content-Type", "text/html; charset=utf-8"
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
If ProxyStr Then .setRequestHeader "Proxy-Connection", "Keep-Alive"
'---------------------------------------------------------------------------
Else
.Open "GET", UrlStr, True
' the following 2 strings (requestheaders) have no changes on error
' .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
' If ProxyStr Then .setRequestHeader "Proxy-Connection", "Keep-Alive"
End If
.send
'after .send method I've got either different errors (is request is sync),
'or constantly .readystate=1 (if request is asynchronous)
Time1 = Now
Do Until .readyState = 4
Application.Wait (Now() + 2 / 24 / 60 / 60) 'wait for 2 sec and check again
DoEvents
If Now - Time1 > 10 / 24 / 60 / 60 Then 'wait for 10 sec, abort request and try all code again - not all proxies can get access to webpage
.abort
GoTo 0
End If
Loop
If .Status = 200 Then
If SaveFilePath <> "" Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write .responseBody
oStream.SaveToFile SaveFilePath, adSaveCreateOverWrite
oStream.Close
Set xmlDoc = Nothing
Else
xmlDoc.body.innerHTML = .responseText
End If
Else
GoTo 0
End If
End With
Set GetRequest = xmlDoc
End Function
Я также пытался отключить брандмауэр, но безуспешно. Ошибки в методе .send с синхронизированным запросом: ошибка времени выполнения -2147012739: «произошла ошибка в поддержке безопасного канала». После отладки и попытки запустить этот шаг снова у меня есть что-то вроде «не могу вызвать этот метод после вызова метода send» (для метода .send).
массив файлов содержит ссылки на mp3, например: https://some_very_long_url / 092f57537047fcd24a6fcb5d3cff57f2 / 6004767
Возможно, у меня ошибка, поскольку в URL-адресе отсутствует расширение файла? Но когда я вставляю эту ссылку в браузер, он предлагает мне сохранить файл самопроизвольно.
Кто-то знает, что не так? Может быть, есть другой способ загрузки файлов по URL через прокси? Ранее я использовал URLDownloadToFile, но он не может использовать прокси.