【问题标题】:Error in Decompression?解压出错?
【发布时间】:2011-01-30 17:36:34
【问题描述】:

我正在为网站编写爬虫。 它的响应是 gzip 编码的。

虽然解压成功,但我无法正确解析特定字段。 我也是用htmlagilitypack来解析的,

该字段的解析值只是原始值的一部分 举个例子 : 我只得到 /wEWAwKc04vTCQKb86mzBwKln/PuCg== 而萤火虫显示实际值的时间要长得多: /wEWBgKj7IuJCgKb86mzBwKln/PuCgLT250qAtC0+8cMAvimiNYD

最后的“==”是什么意思? 我假设它代表减压器的错误?

【问题讨论】:

  • 你能告诉我们任何代码吗? 如何你膨胀压缩数据?您是否将任何返回的结果从字节转换为字符串?如果是这样,哪种编码?等等。
  • == 通常用于终止 BAS64 编码的字符串。
  • 这是我正在阅读的网页中的一个隐藏字段。返回的页面是 gzip 压缩的,这是一个直接字段,在回发时再次使用。所以从语义上讲,它可能只是一个跟踪会话的常量变量。

标签: c# html web gzip


【解决方案1】:

= 字符由Base64 encoding 添加。

编码下面的句子

人之所以与众不同,不仅在于他的理性,而且在于这种与其他动物不同的独特激情,这是一种心灵的欲望,它通过对持续不断和不知疲倦的知识产生的坚持不懈的喜悦,超过了短暂的热情。任何肉体的快乐。

你会得到

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmF​​uY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

= 字符只能出现在 Base64 字符串的末尾。如果你得到它,这意味着你可能得到了所有的字符;反之亦然,因为该字符用作填充字符,并且在所有 Base64 实现中并不总是强制的。

【讨论】:

    【解决方案2】:

    你没有解压的问题。该页面显然已正确解压缩。否则您的软件可能会抛出错误,或者您只会看到一堆奇怪的字符。

    但是,您得到的是一个明显采用 Base 64 编码的 ASCII 字符串。如果原始二进制数据不是 3 字节的倍数,则出现末尾的等号。这就是完美的 Base 64 数据。

    至于为什么你的爬虫获得的数据与带有 Firebug 的 Firefox 不同:我不知道,但可以想象出很多原因。这是两个独立的浏览会话,网站可能只是为它们分配不同的会话 ID 或以某种方式记录会话的一些历史记录。

    无论如何,我不明白你的问题。您究竟无法解析什么?你有什么错误吗? 字段是什么意思?您说的是 HTML 表单的字段吗?

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多