Страницы: 1
RSS
Парсинг HTML кода страницы, ошибка 401 not authorized
 
Друзья, добрый день!
Пытаюсь получить html-код страницы корпоративного портала (помогающие не смогут на него зайти).
Если я просто вставляю ссылку в любой из браузеров на рабочем ПК - она открывается.
Если через любой из найденных мною кодов в интернете - выдает либо "", либо "401 UNAUTHORIZED" вместо html-кода в Immediate.
Как можно обойти такой момент?

Спасибо.

Код
Function GetResponse(ByVal URL$) As String
    On Error Resume Next: Err.Clear
    Static xmlhttp As WinHttpRequest
    If xmlhttp Is Nothing Then Set xmlhttp = New WinHttpRequest
 
    xmlhttp.Open "GET", URL$, True: DoEvents
    xmlhttp.send: DoEvents
 
    If Not xmlhttp.WaitForResponse(timeout&) Then
        Debug.Print "timeout", URL: Exit Function
    End If
 
    GetResponse = xmlhttp.responseText
End Function
Sub test() ' пример использования
    On Error Resume Next
    txt = GetResponse("http://******.******.ru/_layouts/listform.aspx?PageType=4&ListId={C1A84F4D-04EC-499A-8C4D-69D319B5316C}&ID=27/")
    Debug.Print Len(txt) ' возвращает длину текста: 62737 символов
End Sub
Изменено: whateverlover - 13.05.2022 12:42:05
 
Код
Private Function GetHTTPResponse(ByVal sURL As String) As String
    Dim oXMLHTTP
    On Error Resume Next
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
        .SetRequestHeader "Cache-Control", "max-age=0"
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.41 Safari/537.36 OPR/35.0.2066.10 (Edition beta)"
        .SetRequestHeader "Accept-Encoding", "deflate"
        .SetRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
        .send
        GetHTTPResponse = .responseText
    End With
    Set oXMLHTTP = Nothing
End Function
 
Откройте эту саму страницу в браузере Internet Explorer (именно в нём, а не в Edge)
Наверняка там нужно будет авторизоваться, — сделайте это
А потом используйте функцию от nilske (только без строки .SetRequestHeader "Accept-Encoding", "deflate")
Там, в отличие от вашего кода с WinHttpRequest, используется MSXML2.XMLHTTP, который подхватит авторизацию из браузера Internet Explorer
 
А как же вот с этим быть:
Сервисы Microsoft 365 перестали поддерживать браузер Internet Explorer
Начиная с 17 августа 2021года, устаревший браузер постепенно будет недоступен в сервисе Microsoft 365. Пользователям предложат использовать другую программу для работы в интернете. Для уведомления потребителей в приложениях облачного сервиса появятся баннеры, призывающие прекратить использование Internet Explorer.
Отказ от популярной программы объясняют тем, что IE не является актуальным браузером и что он несовместим с новыми цифровыми продуктами компании.
Полная поддержка Internet Explorer во всех версиях операционной системы Windows будет прекращена 15 июня 2022 года.
 
Цитата
Игорь написал:
Откройте эту саму страницу в браузере Internet Explorer (именно в нём, а не в Edge)
Пробовал в IE открывать, страница открывается, не требуя авторизации.
Цитата
edkudin написал:
А потом используйте функцию от nilske (только без строки .SetRequestHeader "Accept-Encoding", "deflate")
Применил функцию, закомментировав данную строку и с ней, в итоге в GetHTTPResponse просто "" (она пустая).

Excel 2016, Windows 10. Через Данные - Из Интернета я могу подключиться к этой странице, значит у Excel есть к ней доступ.
Изменено: whateverlover - 16.05.2022 17:16:28
 
Цитата
whateverlover написал:
просто ""
Закомментируйте строку On Error Resume Next и сразу будет понятно,  что за ошибка возникает
 
doober, Run-time error '-2147024891 (80070005)' Отказано в доступе :(

Гугл только такое выдает, но там решение связанное с настройками Defender'а, которые мне не изменить на рабочем ПК. (есть еще выдача, не так вбил в поиск, почитаю тоже сейчас) Что-то можно еще попробовать?
Изменено: whateverlover - 17.05.2022 09:34:54
Страницы: 1
Наверх