微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA和Excel:绕过Siteminder保护的身份验证浏览网站

如何解决VBA和Excel:绕过Siteminder保护的身份验证浏览网站

我的目标:自动进入Intranet网站以获取.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:How to set and get JSESSIONID cookie in 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- = zzzzzzzzzzzzzzzzzzzzzzzzzz”

此外,如上所述,我有

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;无论如何,我可以使用USER和PASSWORD中存储的变量轻松构建它。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。