Vba winhttp请求仅在fiddler用作代理时有效

Vba winhttp请求仅在fiddler用作代理时有效,vba,fiddler,winhttprequest,Vba,Fiddler,Winhttprequest,我以前从未遇到过这种情况。我试图登录到一个网站,最终目标是下载文档。为了下载文档,我需要一个使用winhttp获得的安全cookie。这个网站很复杂,包含了很多302个重定向,但最后我得到了最后的cookie。但是,下载文档的Url是由服务器动态创建的&看起来它必须与cookie匹配,因此我必须使用winhttp获取最后一个页面并对其进行解析。我所有的其他要求(其中12个)都很好。这是一个Get请求&如果我从Acesss运行它,我会得到4000字节而不是17600字节。如果我把fiddler作为

我以前从未遇到过这种情况。我试图登录到一个网站,最终目标是下载文档。为了下载文档,我需要一个使用winhttp获得的安全cookie。这个网站很复杂,包含了很多302个重定向,但最后我得到了最后的cookie。但是,下载文档的Url是由服务器动态创建的&看起来它必须与cookie匹配,因此我必须使用winhttp获取最后一个页面并对其进行解析。我所有的其他要求(其中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重定向后发送此请求。不幸的是,当我将fiddler置于代理模式时,它会工作,所以我无法检查差异请求。看着他们,他们似乎是一样的,他们应该这样做,因为它“起作用”。关闭代理,代码失败,但fiddler无法捕获我的请求,因此我无法进行比较。我也尝试过不使用设置的代码行,但我发现我的cookie发送了两次?任何关于我应该看什么的想法都将不胜感激。多谢各位


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

在您的请求中添加头

Accept-Encoding: gzip, deflate, br
这意味着允许服务器发送使用
gzip
deflate
(zip)压缩的reposne

从我所读到的
WINHTTP.WinHTTPRequest.5.1
中,它不支持压缩响应的自动解压缩。因此,如果不使用Fiddler,您将看到压缩响应


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

在请求头中,您声称支持
gzip
deflate
压缩。您确定WinHTTPRequest真的支持解压缩压缩响应吗?当Fiddler处于中间时,Fiddler可能会为您解压缩响应,以便WinHTTPRequest能够处理它。Robert,感谢您的响应。我没有想到这一点。当我构建作业时,我会获取在fiddler中捕获的所有标题并将其弹出。我会在星期一把它移除&看看这是否奏效。这是我完成整个工作的最后一步,所以我希望!罗伯特完全正确。经过思考,我无法“打印”得到的4K响应。这对我来说是有道理的。我从这个请求中删除了
WinHttpReq.setRequestHeader“Accept Encoding”、“gzip、deflate、br”
,它工作得非常好。有趣的是,fiddler确实显示了请求头,所以我不能总是使用他们的信息而不询问它,之前的12次呼叫没有遇到这个问题(大多数是小的,但有一次是大的)。