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

仅当提琴手用作代理时,winhttp请求才有效

如何解决仅当提琴手用作代理时,winhttp请求才有效

我以前从未遇到过。我试图登录一个网站,其最终目的是下载文档。为了下载文档,我需要一个通过winhttp获得的安全cookie。这个网站很复杂,涉及很多302重定向,但是最后我得到了我的最终cookie。但是,从中下载文档的网址是由服务器动态创建的,并且看起来它必须与Cookie匹配,因此我必须使用winhttp获得最后一页并将其解析为我的URL。我所有的其他要求(其中12个)都很好。这是一个Get请求,如果我从Acesss运行它,我会得到4000字节而不是17600字节。如果我将fiddler作为代理运行,那么我可以检查我的请求是否有效!但只能通过杂货商作为代理。关闭代理,它会失败。这不是完全失败。如果我更改cookie,我会得到160个字节,它告诉我“再次登录”。此最终请求的基础是:

Set WinHttpReq = CreateObject("WINHTTP.WinHTTPRequest.5.1")
    WinHttpReq.Open "GET",Trim(strRedirectURL),False            'get request
    WinHttpReq.Option(6) = False           'lets 302 codes come back. we then handle
    WinHttpReq.setRequestHeader "Host","servicing1.foragentsonly.com"
    WinHttpReq.setRequestHeader "Connection","keep-alive"
    WinHttpReq.setRequestHeader "Upgrade-Insecure-Requests","1"
    WinHttpReq.setRequestHeader "User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.89 Safari/537.36"
    WinHttpReq.setRequestHeader "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
    WinHttpReq.setRequestHeader "sec-fetch-site","same-site"
    WinHttpReq.setRequestHeader "sec-fetch-mode","navigate"
    WinHttpReq.setRequestHeader "Sec-Fetch-User","?1"
    WinHttpReq.setRequestHeader "Sec-Fetch-Dest","document"
    WinHttpReq.setRequestHeader "Referer","https://www.foraonly.com/managepolicies/policyactivity/processeddateresults/newbusinessprocesseddate/"  
    WinHttpReq.setRequestHeader "Accept-Encoding","gzip,deflate,br"
    WinHttpReq.setRequestHeader "Accept-Language","en-US,en;q=0.9"
    WinHttpReq.setRequestHeader "Cookie",strStepTwelveCookie
    WinHttpReq.Send

我在302重定向后发送了此请求。不幸的是,由于提琴手在将其置于代理模式时可以正常工作,因此无法检查差异请求。看着他们,他们看起来是一样的,因为它“起作用”,所以应该这样做。关闭代理,代码失败,但是提琴手无法捕获我的请求,因此我无法进行比较。我也尝试过没有Set代码行,但是我发现cookie重复发送了吗?关于我应该看的任何想法将不胜感激。谢谢。

编辑:当我通过Chrome开发工具(我想要的弹出式网页)运行此过程时,开发工具会告诉我其4030字节。因此,我的winthhp请求可能不会失败。我在此弹出式网页上看到了一些js函数,我认为其中之一会在页面上加载内容。如果我是对的,我不知道如何用winhttp来模仿这种行为。

解决方法

在您的请求中添加标题

Accept-Encoding: gzip,deflate,br

这意味着允许服务器发送使用gzipdeflate(zip)压缩的存储库。

根据我对WINHTTP.WinHTTPRequest.5.1的了解,它不支持对压缩的响应进行自动解压缩。因此,如果您不使用Fiddler,则会看到压缩的响应。

但是,当您使用Fiddler作为代理时,请求将由Fiddler解压缩,然后转发到WINHTTP.WinHTTPRequest.5.1。在这种情况下,您的脚本将得到Fiddler解压缩的响应主体,该主体当然更大,并且包含您期望的数据。

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