如何使用gzip解压缩从服务器检索的字符串

C4RN4GE

给了我一个问题,其中涉及使用GET_key从服务器检索字符串,然后将其解压缩。一段时间后,我发现这是gzip压缩,但是我的python代码遇到了问题。这是我的问题:

编写一个可以连接到以下服务器的脚本:'localhost',通过TCP 10000发送GET_KEY以下载字符串。使用许多网站中常见的算法对字符串进行压缩。解压缩字符串并打印以获取标志。

我的代码的第一部分工作正常:

import socket
import gzip
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 10000))
s.sendall("GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")
data = s.recv(4096)

并产生结果:

ƫ\ OQHKU(HUHILW,Rt r
5
vR|)&

但是,当我尝试对其进行解压缩时,我会遇到错误。这是我的完整代码:

import socket
import gzip
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 10000))
s.sendall("GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")
data = s.recv(4096)
fil =gzip.GzipFile(data)
print (fil.read())

会产生错误,指出:TypeError:file()参数1必须是没有空字节的编码字符串,而不是str

查找此错误没有给我任何与特定问题相关的信息,因此我必须做错了什么,而且gzip.decompress由于使用python 2.7而无法使用,如何解压缩字符串而不会发生任何错误?

吹牛

gzip.GzipFile构造函数需要一个文件名作为第一个参数,所以你data是作为文件名,当你调用处理,而不是压缩数据gzip.GzipFile(data)

您应该io.BytesIO创建对象,data并使用fileobj参数实例化gzip.GzipFile

from io import BytesIO

fil = gzip.GzipFile(filobj=BytesIO(data))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章