如何用Python获取附加的gzipped JSON文件 {requests, urllib4, mechanize ...}

0 投票
1 回答
658 浏览
提问于 2025-04-18 15:43

我有一个现有的应用程序,它使用PyCurl通过REST接口下载压缩的JSON数据。这个方法虽然能用,但速度太慢,不符合我的需求。

我想找一个类似的解决方案,可以使用连接池。我用requests库做了一个简单的例子,但我不知道怎么获取返回的头信息里提到的那个压缩的JSON文件。

我现在的示例代码是:

#!/usr/bin/python

import requests

headers = {"Authorization" :  "XXX thisworksIgeta200Response",
      "Content-type" : "application/json",
       "Accept" : "application/json"}

r = requests.get("https://longickyGUIDyURL.noname.com",headers=headers,verify=False,stream=True)

data = r.raw.read(decode_content=True)

print data

这个代码返回的是一个HTML页面,而不是我想要的JSON输出。相关的返回头信息看起来是这样的:

'content-disposition': 'attachment; filename="9d5c3c68-0e88-4b2d-88b9-94534b6cb80d"
'content-encoding': 'gzip',

所以,我该用requests还是urllib4(我试过这个,但没找到很多例子或文档)或者其他什么方法呢?

任何建议或推荐都非常欢迎!

1 个回答

0

Content-Disposition这个响应头字段是用来让服务器建议一个默认的文件名,当用户请求将内容保存为文件时(参考rfc2616)。

这个头部里的文件名只是一个建议,告诉浏览器应该把文件保存成什么名字。实际上,服务器并没有其他文件,返回的内容就是全部。content-encoding: gzip这个头部表示页面的内容在传输过程中经过了gzip压缩,但requests模块会为你解压缩这些内容。

所以,如果你得到的是HTML内容,而你期待的是JSON格式,那你可能访问了错误的URL。

撰写回答