WinHttpRequest gzip 响应解析

2023-12-02

我在用着MSXML2.XMLHTTP60在我的 VBA 项目中进行 http 冲浪。问题是MSXML2.XMLHTTP60仅限于四个并发请求。

我正在尝试使用WinHttp.WinHttpRequest.5.1相反,还有另一个问题。MSXML2.XMLHTTP60自动解析 gzip 结果,但是WinHttpRequest.responseText方法失败并出现错误:

目标多字节代码页中不存在 unicode 字符的映射。

如何使用标准 Windows 库解析此结果?

代码示例:
MSXML2.XMLHTTP60 限制:

Public req1 As MSXML2.XMLHTTP60
Public req2 As MSXML2.XMLHTTP60
Public req3 As MSXML2.XMLHTTP60
Public req4 As MSXML2.XMLHTTP60
Public req5 As MSXML2.XMLHTTP60

Private Const url As String = "http://speedtest.tele2.net/100MB.zip"


Public Sub ConcurrentIssue()
    Set req1 = New MSXML2.XMLHTTP60
    req1.Open "get", url, True

    Set req2 = New MSXML2.XMLHTTP60
    req2.Open "get", url, True

    Set req3 = New MSXML2.XMLHTTP60
    req3.Open "get", url, True

    Set req4 = New MSXML2.XMLHTTP60
    req4.Open "get", url, True

    Set req5 = New MSXML2.XMLHTTP60
    req5.Open "get", url, True

    req1.send
    req2.send
    req3.send
    req4.send

    'This query will be wait
    req5.send

End Sub

问题是WinHttp.WinHttpRequest.5.1不支持解压(证明链接:https://msdn.microsoft.com/ru-ru/library/windows/desktop/hh227298(v=vs.85).aspx).
我需要自己解压缩响应。

解压问题示例:

Public Sub DecompressOk()
    Set req1 = New MSXML2.XMLHTTP60
    req1.Open "get", "http://www.google.ru", False
    req1.setRequestHeader "User-Agent", "Fiddler"
    req1.setRequestHeader "Accept-Encoding", "gzip, deflate"
    req1.send

    Debug.Print req1.responseText
End Sub

Public Sub WithoutDecompress()
    Dim req As WinHttp.WinHttpRequest
    Set req = New WinHttp.WinHttpRequest

    req.Open "get", "http://www.google.ru", False
    req.setRequestHeader "User-Agent", "Fiddler"
    req.setRequestHeader "Accept-Encoding", "gzip, deflate"
    req.send

    Debug.Print req.responseText
End Sub

我试图做这个技巧但没有成功:

Public Sub DecompressIssue()
    Dim req As WinHttp.WinHttpRequest
    Set req = New WinHttp.WinHttpRequest

    req.Open "get", "http://www.google.ru", False
    req.setRequestHeader "User-Agent", "Fiddler"
    req.setRequestHeader "Accept-Encoding", "gzip, deflate"
    req.send

    SaveBinaryToFile req.responseBody, "C:\test.zip"

    Dim xmlReq As MSXML2.XMLHTTP60
    Set xmlReq = New MSXML2.XMLHTTP60

    xmlReq.Open "get", "C:\test.zip", False
    xmlReq.setRequestHeader "Accept-Encoding", "gzip, deflate"
    xmlReq.setRequestHeader "Content-Type", "text/html; charset=windows-1251"
    xmlReq.send

    Debug.Print xmlReq.responseBody
End Sub

Sub SaveBinaryToFile(arrBytes() As Byte, strPath As String)
    With CreateObject("ADODB.Stream")
        .Type = 1 ' adTypeBinary
        .Open
        .Write arrBytes
        .SaveToFile strPath, 2 ' adSaveCreateOverWrite
        .Close
    End With
End Sub

This answer confirms the comment made by omegastripes.

.setRequestHeader "Accept-Encoding", "identity"是正确的答案!

我已经搜索了几天来寻找一种解码 gzip 响应的方法,但不知道我们可以告诉服务器不要压缩响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinHttpRequest gzip 响应解析 的相关文章

  • 使用 VBA 设置 Sharepoint 标签/属性

    是否可以使用 VBA 设置 Sharepoint 文档 特别是 Excel 的标签 目前我知道处理此问题的唯一方法是将文件保存到 Sharepoint 在出现提示时设置标签 然后再次下载该文件并将其用作模板 然而 我需要使用这些标签的几种不
  • R 中的 Tabulizer 包:如何在特定标题后抓取表格

    如何从 PDF 中抓取一些标题文本前面的表格 我正在尝试 tabulizer 包 这是从特定页面获取表格的示例 波兰语 公共卫生需求地图 library tabulizer library tidyverse options java pa
  • VBA:访问 JSON

    我正在处理 VBA 投影 但不确定如何访问此 JSON 中的 id 应该将 players 设置为什么才能在循环中获取 id 我已经用更多代码更新了问题 JSON event games players id 182759 Code Pri
  • Golang 网络爬虫 NTLM 身份验证

    Golang 网络抓取工具需要从经过 NTLM 验证的网页中提取信息 有了有效的用户名和密码 网络抓取工具如何与服务器进行 NTLM 4 次握手 以获得对后面受保护网页的访问权限 url username password http www
  • 请求response.iter_content()获取不完整的文件(1024MB而不是1.5GB)?

    您好 我一直在使用此代码片段从网站下载文件 到目前为止 小于 1GB 的文件都很好 但我注意到 1 5GB 文件不完整 s is requests session object r s get fileUrl headers headers
  • 双击事件 - 多个范围

    我正在寻找为双击事件在多个范围内进行编码的最佳方法 Private Sub Worksheet BeforeDoubleClick ByVal Target As Range Cancel As Boolean If Not Interse
  • 通过文本自动创建到另一个工作表的超链接

    我想知道如何基于各自工作表中两个单元格具有的相同文本值 通过脚本自动创建从一个 Excel 工作表到另一个 Excel 工作表的超链接 如果这可以在没有脚本的情况下完成 使用某种公式 如 VLOOKUP 这将是更好的选择 谢谢你的时间 使用
  • Excel Q - 带有二维数组的 SUMIFS

    我有一个二维数组 水平轴上的日期和垂直轴上的标识号 我想要以特定日期和 ID 为条件的总和 并且我想知道如何使用 SUMIFS 来执行此操作 由于某种原因 我似乎不能 因为数组是二维的 而标准范围是一维的 谁能给我关于我可以使用的其他公式的
  • Excel VBA - 循环文件夹中的文件、复制范围、粘贴到此工作簿中

    我有 500 个包含数据的 Excel 文件 我会将所有这些数据合并到一个文件中 实现此目标的任务列表 我想循环遍历文件夹中的所有文件 打开文件 复制此范围 B3 I102 将其粘贴到活动工作簿的第一张工作表中 重复但在下面粘贴新数据 我已
  • WPF 无法从 url 检索 WebP 图像?

    我无法从网址检索图像 以前 在设置 HttpClient 标头之前 我根本无法连接到该站点 我可以从其他来源检索图像 但不能从这个特定来源检索图像 检索图像的代码 var img new BitmapImage img BeginInit
  • 如何从网站中提取冠状病毒病例?

    我正在尝试从网站中提取冠状病毒 https www trackcorona live https www trackcorona live 但我得到了一个错误 这是我的代码 response requests get https www t
  • VBA rand 如何使用上限和下限生成随机数?

    所以也许这是多余的 也许这就像问为什么大多数人生来就有 5 个手指 最后的简短答案总是 因为事情就是这样 而且它就是这样工作的 但我讨厌这个答案 该死的我想知道怎么做VBA 中的 Rnd 函数有效 Ms Office Excel 的 MSD
  • 用于将 MS Word 表导出到 Excel 工作表的宏

    我有一个包含许多表格的word文档 有谁知道如何编写宏将此类表导出到不同的 Excel 工作表 答案摘自 http www mrexcel com forum showthread php t 36875 http www mrexcel
  • 如何保护我的网站免遭 HTTrack 或其他软件的翻录?

    我最近获得了批准的网站模板主题森林 http themeforest net 我的网站流量过多 并注意到我在 Themeforest 上的演示被 HTTrack 等某些软件破坏 如果这种情况持续下去 该产品的销量最终可能会下降 那么 有什么
  • 如果字符串包含列表中的单词,则返回与列表值相邻的值

    目前我有一组单元格 每个单元格在无用的信息中都有一个唯一的标识符 我还有这些唯一标识符的列表 以及每个标识符对应的值 我想做的是找到一个单元格包含哪个标识符 如果有的话 然后输出相应的值 下面是一个例子 https i stack imgu
  • 如何粘贴到Excel B列的最后一行?

    我需要将单元格从 H2 L2 一直向下剪切并将其粘贴到 B 列的最后一行 数据每次都会不同 所以我无法对任何范围进行硬编码 VBA 代码会很好 从 H2 L2 向下剪切并粘贴 插入到 B 列的最后一行 到目前为止我得到了 Range H2
  • FileDialog 保留以前的过滤器

    我正在 Access 数据库中制作表单 我需要打开文件对话框窗口几次 我只是不明白为什么在我更改选项值几次并打开文件对话框窗口后它没有更改过滤器 Public Sub Command17 Click Dim fd As FileDialog
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • Puppeteer 的行为与开发者控制台不同

    我正在尝试使用 Puppeteer 提取此页面的标题 https www nordstrom com s zella high waist studio pocket 7 8 leggings 5460106 https www nords
  • 拆分具有多行文本和单行文本的行

    我试图弄清楚如何拆分数据行 其中行中的 B C D 列包含多行 而其他列不包含多行 我已经弄清楚如何拆分多行单元格 如果我将这些列复制到新工作表中 手动插入行 然后运行下面的宏 仅适用于 A 列 但我在编码时迷失了休息 Here s wha

随机推荐

  • 使用 powershell 和 7zip 创建存档的脚本

    我们有几台服务器每天将日志文件写入 C Logs 每个月都会运行一个脚本来识别超过 30 天的文件 将其存档并删除源文件 C Logs 文件夹包含日志文件以及也包含日志文件的子文件夹 名为 1234 4567 7890 作为 Powersh
  • Java 中的类型参数

    下面两个声明有什么区别吗 public
  • 如何结合使用 Socket.io 和 Express.JS(使用 Express 应用程序生成器)

    我正在尝试将 Socket io 与 Express JS 结合使用 使用 Express 应用程序生成器 我发现了一些如何做到这一点的问题 在 Express 4 和 express generator 的 bin www 中使用 soc
  • 使用密码短语的 Java AES 和 CBC

    我想用 Java 实现 256 密钥 AES 和 CBC 加密 收件人以字符串 absnfjtyrufjdngjvhfgksdfrtifghkv 的形式向我发送了 256 位密码 使用以下 openssl 命令可以完美运行 echo tes
  • 在安装的 pygame 目录中哪里可以找到 pygame.init() 方法?

    我找不到 pygame init 函数 请看看我做了什么 ckim chan ubuntu python Python 2 7 12 default Nov 12 2018 14 36 49 GCC 5 4 0 20160609 on li
  • 从另一个 Android 应用程序中的 APK 调用 Activity

    我有一个 Android 应用程序 它启动一个活动并且运行良好 我需要其他开发人员能够将我的 APK 集成到他们的应用程序中 以便他们可以从他们的 Android 应用程序启动我的 APK 中的活动 有哪些方法可以实现这一目标 谢谢 乔治
  • 从扫描仪获取字符输入

    我正在尝试找到一种方法char从键盘输入 我尝试使用 Scanner reader new Scanner System in char c reader nextChar 这个方法不存在 我尝试服用c as a String 然而 它并不
  • jQuery.proxy() 用法

    我正在阅读有关的 apijQuery proxy 它看起来很有希望 但我想知道在什么情况下最好使用它 谁能启发我吗 当你想要一个具有以下功能的函数时this值绑定到特定对象 例如 在事件处理程序 AJAX 回调 超时 间隔 自定义对象等回调
  • usleep() 计算经过的时间表现得很奇怪

    我使用下面的代码计算每次连续调用处理程序函数所花费的时间 以毫秒为单位 当我使用 usleep 1000 时 即每次调用之间的 1 毫秒时间差为 10 毫秒 而当我使用 usleep 1000000 时 即 1 秒 每次调用之间的时间间隔令
  • 覆盖从另一个模块导入的函数中的全局变量

    假设我有两个模块 a py value 3 def x return value b py from a import x value 4 我的目标是使用以下功能a x in b 但更改函数返回的值 具体来说 value将被查找a作为全局名
  • 删除事件发生时从 Microsoft Graph 获取通知

    我已经订阅了活动 https outlook office com api v2 0 me events 推送通知 当我删除重复主事件的一个事件时 我收到带有主事件 ID 的更新通知 而不是特定发生事件 ID 如果不与所有以前的重复事件进行
  • 使用命名实体训练模型

    我正在使用命名实体识别器查看standford corenlp 我有不同类型的输入文本 我需要将其标记到我自己的实体中 所以我开始训练我自己的模型 但它似乎不起作用 例如 我的输入文本字符串是 Book of 49 Magazine Art
  • Setter.Target 给我一个错误“RelativePanel.AlignHorizo​​ntalCenterWithPanel”

    我正在开发一个 UWP 应用程序 我正在使用 Template10 我有一个TextBlock 在VisualStateNarrow我要它RelativePanel AlignVerticalCenterWithPanel True and
  • 令人惊讶的是,达夫尼未能验证集合理解的有界性

    Dafny 对于集合交集函数的定义没有任何问题 function method intersection A set
  • Android:如何控制主页按钮

    我们正在尝试为我邻居的精神和身体残疾的女儿提供一个应用程序 让她使用 Android 平板电脑作为说话者 也就是说 她按下几个大按钮 设备就会生成语音 该应用程序基本上是一个 WebView 和一个 Javascript 中的附加对象 用于
  • Python - 尽管使用 df.loc 但仍获取“SettingWithCopyWarning”

    尽管使用了推荐的方法 我还是收到了SettingWithCopyWarning 我缺少什么 我该如何纠正它或抑制这个特定的警告 import numpy as np import pandas as pd df pd DataFrame n
  • 如何在 Django 中创建一个查询集来查看数据库中的名称是否是我的查询字符串的子字符串?

    正如标题所提到的 我正在 Django 中工作 并尝试创建一个查询集来返回所有名称值是我的 query string 的子字符串的 客户 模型 我想要这样的东西 Customer objects filter firstName icont
  • 编写 ruby​​gems 的陷阱

    已有问题及答案how to writerubygem 但是在编写 ruby gem 时应该避免什么 什么会给使用您的 ruby gem 的人带来问题 宝石包装 最佳实践给出了很多建议 其中一些包括 不要污染全局加载路径 理想情况下 只有fo
  • SceneKit SCNPhysicsBody 收到休息通知

    SceneKit有没有办法在什么时候收到通知dynamicBody处于休息状态 我想删除dynamicBody当它落到地面并完全停止移动时 我想我会有相当多的那些 所以我想使用基于事件的东西 而不是循环遍历所有bodies并检查它们的速度
  • WinHttpRequest gzip 响应解析

    我在用着MSXML2 XMLHTTP60在我的 VBA 项目中进行 http 冲浪 问题是MSXML2 XMLHTTP60仅限于四个并发请求 我正在尝试使用WinHttp WinHttpRequest 5 1相反 还有另一个问题 MSXML