weixin_47730444 2023-10-01 17:07 采纳率: 30%
浏览 19
已结题

使用vba抓取重定向网页问题

rt,使用如下代码登录一个重定向302网页,但是发现返回的信息不是我想要的,fiddler上抓包到的信息是有重新设置了一个cookie,而且重定向网页也和我模拟得到的不一样,我自己模拟的没有设置新的cookie,求解可能是什么原因导致的。


   Set WebBrowser1 = CreateObject("WinHttp.WinHttpRequest.5.1")
   
   k1 = "https://idm.tianma.cn/idp/AuthnEngine?currentAuth=urn_oasis_names_tc_SAML_1.0_am_password"
   data0 = "j_username=xxx_xxx&j_password=" & rsa & "&j_checkcode=%E9%AA%8C%E8%AF%81%E7%A0%81&op=login&spAuthChainCode=" & spAuthChainCode
   WebBrowser1.Option(6) = False
   WebBrowser1.Open "POST", k1, False
   WebBrowser1.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
   WebBrowser1.setRequestHeader "Referer", "https://idm.tianma.cn/idp/authcenter/ActionAuthChain?entityId=OA"
   WebBrowser1.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
   WebBrowser1.setRequestHeader "Cookie", cookie
   WebBrowser1.setRequestHeader "Host", "idm.tianma.cn"
   
   WebBrowser1.Send data0

img

img

img

img

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-01 17:32
    关注
    获得0.45元问题酬金

    引自免费微信小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    可能是因为你的代码中没有正确处理重定向的情况。根据你的描述,重定向后会设置一个新的cookie,但你没有获取并保存新的cookie,在之后的请求中使用这个新的cookie。

    你可以尝试在请求发送后,通过判断返回的状态码是否为302,然后获取重定向的地址和新的cookie,并在后续的请求中使用这个新的cookie。

    示例代码如下:

    Set WebBrowser1 = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    k1 = "https://idm.tianma.cn/idp/AuthnEngine?currentAuth=urn_oasis_names_tc_SAML_1.0_am_password"
    data0 = "j_username=xxx_xxx&j_password=" & rsa & "&j_checkcode=%E9%AA%8C%E8%AF%81%E7%A0%81&op=login&spAuthChainCode=" & spAuthChainCode
    WebBrowser1.Option(6) = False
    WebBrowser1.Open "POST", k1, False
    WebBrowser1.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    WebBrowser1.setRequestHeader "Referer", "https://idm.tianma.cn/idp/authcenter/ActionAuthChain?entityId=OA"
    WebBrowser1.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
    WebBrowser1.setRequestHeader "Cookie", cookie
    WebBrowser1.setRequestHeader "Host", "idm.tianma.cn"
    
    WebBrowser1.Send data0
    
    If WebBrowser1.Status = 302 Then
      redirectUrl = WebBrowser1.getResponseHeader("Location")
      newCookie = WebBrowser1.getResponseHeader("Set-Cookie")
      ' 使用新的cookie进行后续的请求
      ' ...
    End If
    

    在发送请求后,判断状态码是否为302,并使用 getResponseHeader 方法获取重定向的地址和新的cookie,然后根据需要使用新的cookie进行后续的请求。

    注意:这只是一个示例代码,实际情况可能会有差异,你需要根据具体的情况进行调整。另外,你可能需要重新引入相应的库,例如 Microsoft.XMLHTTP

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月9日
  • 创建了问题 10月1日