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 - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • Jsoup - 获取仅包含指定属性及其值的 HTML 标记

    我想用jsoup从页面中提取具有以下内容的元素only一些特定的属性和值 我已经经历过以下提到的方法 但没有一个很好地解决了我的目的 Jsoup s getElementsByAttributesMatching 选择查询的这种格式 doc
  • 编辑和重播 XHR chrome/firefox 等?

    我一直在寻找一种方法来改变XHR request在我的浏览器中制作 然后再次重播 说我有完整的POST请求在我的浏览器中完成 我唯一想要更改的是一个小值 然后再次播放 直接在浏览器中执行此操作会更容易 更快捷 我用谷歌搜索了一下 但没有找到
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • 使用 ObjPtr(Me) 返回自定义类实例的名称?

    我明白那个ObjPtr http support microsoft com kb 199824将返回内存中对象的地址 并且它指向一个名为 IUNKNOWN 的结构 并且其中编码了某种接口定义以公开对象结构 但我不知道如何确定一个对象的接口
  • VBA 中 AND 函数如何工作?

    如果这是一个愚蠢的问题 我很抱歉 但是 Excel VBA AND 函数是否检查其中的每个条件然后继续 或者在第一个 FALSE 条件处停止而不检查其他条件 我想知道出于优化目的 但到目前为止在网上没有找到任何相关信息 提前致谢 示例 如果
  • VBA 中的匈牙利语好吗?

    我在 Net 中不使用匈牙利语 str int 前缀 但我仍然发现它在 VBA 中很有用 因为在 VBA 中很难看到类型 这很糟糕吗 不必要 也许我错过了一些东西 我真的很感激任何反馈 我想知道有一段时间了 谢谢大家 我想说 这种匈牙利符号
  • VBA ByRef 参数类型不匹配

    最初在我的主代码部分中 我有一个丑陋的 if 语句 尽管它会运行丑陋 我决定将其设为我要调用的函数 这导致我收到错误 编译错误 ByRef 参数类型不匹配 我的假设是该函数需要正确引用 尽管我一直在阅读文档并且不明白为什么 gt 声明 Sh
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用 split 函数到数组中会导致编译错误:无法分配给数组

    我正在尝试使用split 函数根据给定名称字符串中的空格拆分名称 当尝试编译我在下面编写的代码时 出现编译错误 无法分配给数组 我几乎从这里复制了微软的示例 https support microsoft com en us kb 2662
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代
  • rvest如何通过id选择特定的css节点

    我正在尝试使用 rvest 包从网页中抓取数据 简单来说 html 代码如下所示 div class style div
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 从 VBA 访问串行端口的最佳方法是什么?

    从 VBA 访问串行端口的最佳方法是什么 我需要我们的一些销售代表能够通过 PowerPoint 中的操作按钮通过串行端口发送简单的字符串 我不常用 VBA 尤其是像这样的事情 通常我会把它变成某种应用程序 但实际上我认为这个想法并没有那么
  • 在 Excel 中查找结果将行复制到另一张工作表

    我需要一些帮助将数据从一个 Excel 工作表复制到另一个 例如 样本数据 A B C 1 aaa bbb ddd 2 bbb ccc eee 2 bbb ccc eee 3 ccc fff rrr 4 ccc fff ttt 5 ddd

随机推荐

  • 使用 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