VBA и Excel: серфинг по сайту в обход аутентификации, защищенной Siteminder

Моя цель: автоматический вход на сайт интрасети для получения данных в файлах .xls

Предварительное объяснение: я регулярно извлекаю данные большое количество раз за один день с помощью ручных операций; Мне нужно автоматическое решение для экономии времени. Доступные средства: Excel и Vba (внешние ограничения, установленные моей фирмой)

Первая попытка, которую я предпринял, заключалась в следующем: я выполнил операцию входа в систему (защищенную Siteminder) и присоединился к домашней странице:

Sub enter_site()
Dim myId As String, myCode As String
Dim s3 As Worksheet
Dim IE As Object, frm As Object
Set s3 = ThisWorkbook.Worksheets("Sheet3")
myId = s3.Range("I1")      
myCode = s3.Range("K1")   
Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .navigate "https://intranetsite.com/up-password/LoginUp-Password.jsp?TARGET2=https://intranetsite.com/up-password/login/login_redirect.html"
        While .Busy Or .readyState <> 4: DoEvents: Wend             
      'LOGIN     
        Set frm = .document.forms(1)
        frm.Item("USER").Value = myId
        frm.Item("PASSWORD").Value = myCode
Application.Wait (Now + TimeValue("0:00:02"))
        frm.submit        
        While .Busy Or .readyState <> 4: DoEvents: Wend        
    End With

‘CHANNEL TOWARDS HOME PAGE
With IE
    .navigate "https://site2.intranet.com/mask/home.aspx"
    While .Busy Or .readyState <> 4: DoEvents: Wend
End With

Это нормально до определенного момента. Я имею в виду: я могу присоединиться к домашней странице, но я не могу, несмотря на различные стратегии, которые я пробовал, получить необходимые данные, потому что:

  1. Я не могу манипулировать «враждебными» календарями и выпадающими меню, как обычно делаю в других обстоятельствах;
  2. Я также должен манипулировать «враждебными» всплывающими окнами по пути.

Итак, на мой взгляд, лучшее решение - это методы MSXML2.XMLHTTP или WinHttp.WinHttpRequest.5.1 или что-то в этом роде. Но, к сожалению, я с ними не знаком. Во всяком случае, я пытался двигаться дальше. Я не из тех, кого легко разочаровать, и я проанализировал операции с помощью Fiddler.

Итак, я запустил запрос Get следующим образом:

Dim URL As String, strResponse As String
Dim objHTTP As Object
URL = https://intranetsite.com/up-password/LoginUp-Password.jsp?TARGET2=https://intranetsite.com/up-password/login/login_redirect.html
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
    With objHTTP
        .Open "GET", URL, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .send
        strResponse = .responseText
        Sheets(2).Range("A1") = strResponse
End With

Затем я захватил пару связанных файлов cookie, используя советы на этой странице: Как установить и получить файл cookie JSESSIONID в VBA? Я поместил их в 2 ячейки:

Dim ck1 As String
Dim ck2 As String
        ck1 = Sheets(2).Range("B12")
        ck2 = Sheets(2).Range("B13")

Допустим следующие значения: ck1 = «JSESSIONID=blablabla» ck2 = «BIGipServerauth-=zzzzzzzzzzzzzzzzzzzzzzzz»

Кроме того, как указано выше, у меня есть:

myId = s3.Range("I1")      '<<< Username (johnsmith)
myCode = s3.Range("K1")   '<<< Password (london55)

Теперь следующим шагом является выполнение операции входа в систему с помощью почтового запроса.

В Fiddler я прочитал:

POST https://intranetsite.com/siteminderagent/forms/login.fcc HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer:  https://intranetsite.com/up-password/LoginUp-Password.jsp?TARGET2=https://intranetsite.com/up-password/login/login_redirect.html _redirect.html
Accept-Language: it-IT
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: intranetsite.com
Content-Length: 181
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=…..; BIGipServerauth-……..; _WL_AUTHCOOKIE_JSESSIONID=…; SMSESSION=…

SMENC=UTF-8&target……..login_redirect.html&smauthreason=0&USER=johnsmith&PASSWORD=london55

Как мне создать почтовый запрос?
(Я заметил, что мне, вероятно, нужно захватить другие файлы cookie: _WL_AUTHCOOKIE_JSESSIONID и SMSESSION).
(Я не знаю, что такое SMENC; в любом случае я могу легко создать его, используя сохраненные переменные в поле ПОЛЬЗОВАТЕЛЬ и ПАРОЛЬ).


person Rubens78    schedule 07.10.2020    source источник