Как отловить ошибку в MSXML2.XMLHTTP60, Запрос через браузер (любой) к вебстранице загружает ее без проблем. Аналогичный запрос через VBA возвращает код другой страницы.
Запрос через браузер (любой) к вебстранице загружает ее без проблем. Аналогичный запрос через VBA возвращает код другой страницы.
Вот фрагмент кода запроса:
Код
Set xhr = New MSXML2.XMLHTTP60
With xhr
.Open "GET", url$, False
.send
If .readyState = 4 And .status = 200 Then
Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = .responseText
Else
MsgBox "Error" & vbNewLine & "Ready state: " & .readyState & _
vbNewLine & "HTTP request status: " & .status
End If
End With
никаких редиректов нет вот еще пример кода, который сохранит вам в текстовый файл HTML код страницы по ссылке (проверял, грузится именно нужная страница)
Код
#If VBA7 Then ' Office 2010-2013
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr
#Else ' Office 2003-2007
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
#End If
Function DownLoadFileFromURL(ByVal URL$, ByVal LocalPath$, Optional ByVal DisableCache As Boolean = False) As Boolean
On Error Resume Next: Dim shortFilename$
If (LocalPath$ = "") Or (URL$ = "") Then Exit Function
If Not LocalPath$ Like "*\*" Then LocalPath$ = Environ("TEMP") & "\" & LocalPath$
Kill LocalPath$
shortFilename$ = Mid(LocalPath$, InStrRev(LocalPath$, "\") + 1)
If DisableCache Then Randomize: URL$ = URL$ & "?rnd=" & Left(Rnd(Now) * 1E+15, 10)
DownLoadFileFromURL = URLDownloadToFile(0, URL$, LocalPath$, 0, 0) = 0
End Function
Пока что результат отрицательный. Вот что получилось. Я использовал Ваш код в новом файле. VBA 7. Он рабочий и сохраняет файл, но это не целевая страница, а редирект, так же как и у меня. Добавление параметра к URL не оказался в данном случае действенным методом.
Целевая страница на сайте исходнике: https://yadi.sk/i/fINLLyUb3GvMBP test.rar: сохраненный файл html страницы test_file: файл с кодом скрипта
Сервер не переадресует страницу при переходе по внутренней ссылке с соответствующей родительской категории, но при прямом вызове url происходит переадресация. Браузер с настройкой "отключенное метаобновление" переадресацию не выполняет, без этой опции переадресация происходит аналогично работе скрипта. Никакие танцы с бубном пока не позволили добиться такого результата.
Предполагаю: Видимо сервер через javascript или php перехватывает ссылку идентифицируя ее по классу или "как внутреннюю". Далее переадресует или нет.
Не уверен, что решение существует для Vba скрипта, чтобы обойти переадресацию. У меня не хватает опыта в данном вопросе, чтобы сделать правильный эксперимент. Видимо решение м.б. в кастомном запросе.