我正在尝试使用以下代码段从HTTP帖子中获取数据:
import request
# Using @ to signify personal info
url = "@@@@@"
querystring = {"user":"@@@@@yahoo.com"}
headers = {
'token': 1234,
'content-type': "application/x-www-form-urlencoded",
'host': "@@@",
'connection': "Keep-Alive",
'accept-encoding': "gzip",
'content-length': "0",
'cache-control': "no-cache"
}
response = requests.request("POST", url, headers=headers, params=querystring)
print(response.text)
我得到以下结果(......是'数据'字符串的其余部分):
{'data': 'H4sIAAAAAAAAAO...T7R358EQT/u3/8D+8Rtv5/DwIA', 'error_code': 0, 'response_desc': 'SUCCESS'}
与我在stackoverflow上找到的所有其他问题不同,感兴趣的gzip压缩数据存在于json响应中。 json对象本身未压缩。我试过了
zlib.decompress(response.json().get("data"),15 + 32)
但是得到错误
TypeError: a bytes-like object is required, not'str'
我是否正确处理解码?我看到有关解码gz文件的大量文档,但这只是一个gz压缩的字符串。
额外尝试:尝试
zlib.decompress(response.json().get("data").encode(), 16 + zlib.MAX_WBITS)
给我错误:
incorrect header checkk
答案 0 :(得分:4)
这个答案归功于http://www.txtwizard.net/compression的作者:
事实证明,在使用@coldspeed在评论中建议的格式解压缩之前,需要先对base64进行解码。
zlib.decompress(base64.b64decode(response.json().get("data")), 16 + zlib.MAX_WBITS)
答案 1 :(得分:0)
首先需要将字符串转换为字节数组。这可以通过两种方式完成
bytes = bytes(your_string)
或
bytes = your_string.encode()