给了我一个问题,其中涉及使用GET_key从服务器检索字符串,然后将其解压缩。一段时间后,我发现这是gzip压缩,但是我的python代码遇到了问题。这是我的问题:
我的代码的第一部分工作正常:
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))
关于python - 如何使用gzip解压缩从服务器检索的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55582546/