Страницы: 1
RSS
Как отловить ошибку в 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

запрашиваемая страница "https://f.ua/amica/optima-14p.html"
страница в ответе "https://f.ua/amica/optima-18.html"
копипаст через браузер https://yadi.sk/i/_YG_ksXp3GtVnm дает верный ответ без редиректа

Очень нужна помощь в этом вопросе, совершенно не понимаю, как подступиться к решению проблемы.
 
А проще загрузить страницу не пробовали?
http://excelvba.ru/code/GetHTTPResponse
 
Нужно самостоятельно указывать на дубли темы:
 
Цитата
Игорь написал: А проще загрузить страницу не пробовали?
Это по сути оно и есть. Вопрос в том, что идет переадресация. Есть ли способ эффективно ее блокировать.

метод .setRequestHeader "AllowAutoRedirect", "False" - оказался не действенным
 
никаких редиректов нет
вот еще пример кода, который сохранит вам в текстовый файл 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 происходит переадресация. Браузер с настройкой "отключенное метаобновление" переадресацию не выполняет, без этой опции переадресация происходит аналогично работе скрипта. Никакие танцы с бубном пока не позволили добиться такого результата.
 
Ссылка в родительской категории на сайте исходника не имеет параметров https://yadi.sk/i/sNPaG01W3GvNB3

Предполагаю: Видимо сервер через javascript или php перехватывает ссылку идентифицируя ее по классу или "как внутреннюю". Далее переадресует или нет.

Не уверен, что решение существует для Vba скрипта, чтобы обойти переадресацию. У меня не хватает опыта в данном вопросе, чтобы сделать правильный эксперимент. Видимо решение м.б. в кастомном запросе.

Так что буду благодарен за любую помощь.
 
Отработка запроса в Fiddler https://yadi.sk/i/Z5Y07YmX3GvSeH
 
Провел небольшой эксперемент с использованием вебпрокси. В этом случае редирект не происходит https://yadi.sk/i/0yhbpDcw3GvTxw
Страницы: 1
Читают тему
Наверх