gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:03:35 25 4
gpt4 key购买 nike

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

Write a script which can connect to the following server: 'localhost', 10000 over TCP send GET_KEY to download a string. The string is compressed with a common algorithm found in many websites. Uncompress the string and print it to get the flag.

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

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 对象,并使用 fileobj 参数实例化 gzip.GzipFile 相反:

from io import BytesIO

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

关于python - 如何使用 gzip 解压缩从服务器检索的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com