【问题标题】:Search data in a packet. In python搜索数据包中的数据。在蟒蛇
【发布时间】:2013-12-08 21:39:56
【问题描述】:

我正在尝试编写一个小型 HTTP 本地代理服务器以在我的机器上运行并运行一些测试。 我的服务器目前运行良好,可以很好地处理请求。

但是,当我尝试分析打包程序时 - 我遇到了问题。

我正在我的数据包中搜索标签“”,并在找到时将消息打印到日志中。 它适用于数量非常有限的网站,而在其他网站(例如 StackOverflow)上则不行。

在接收到的数据中搜索单词之前,是否需要进行某种解码?如果是这样 - 哪个解码?如何重新编码数据以提供给浏览器?

这是我的搜索和替换代码:

data = i.recv(8192)
   if data:
      if "<head>" in data:
         print "Found Head Tag."

上面的代码是一个简单的python代码,用来从socket中获取数据,保存到数据对象中,然后搜索想要的标签。正如我所说,它适用于极少数网站,而不适用于其他网站。

【问题讨论】:

    标签: python arrays sockets replace byte


    【解决方案1】:

    许多网络服务器使用压缩来降低带宽使用率。 您需要检查 HTTP 标头的 Content-Encoding 并应用所需的操作(即 gzip 解压缩)来获取纯文本。

    【讨论】:

    • 谢谢!但是,我怎样才能解压缩一个数据块,就像上面的那个?当我尝试使用 zlib 模块时,我收到一个错误,说它不是有效的压缩数据。如果你能帮我解决它,我会很高兴。我需要缓冲整个响应吗?它会大大减慢冲浪速度,不是吗?
    • 另外,如果我使用 zlib 而不是 gzip 有关系吗?电视!
    • 是的,你需要缓冲整个 HTTP 响应,检查 Content-Encoding 的值,提取响应的主体(没有标头)并将其传递给“gzip”模块(zlib 使用的压缩算法是相同的,但它们的输出格式不兼容)。当然,响应可以使用不同的算法进行压缩或编码,但是,afaik,实际上只使用了 gzip。您还应该考虑在将结果转发给客户端之前重新压缩数据或删除 Content-Encoding 标头。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2023-03-26
    • 2012-09-27
    • 2022-06-17
    • 2022-08-21
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多