我正在尝试开发一个非常简单的概念验证来以流方式检索和处理数据。我请求的服务器将以块的形式发送数据,这很好,但是我在使用httplib
迭代块时遇到了问题。
这是我正在尝试的:导入 httplib
def getData(src):
d = src.read(1024)
while d and len(d) > 0:
yield d
d = src.read(1024)
if __name__ == "__main__":
con = httplib.HTTPSConnection('example.com', port='8443', cert_file='...', key_file='...')
con.putrequest('GET', '/path/to/resource')
response = con.getresponse()
for s in getData(response):
print s
raw_input() # Just to give me a moment to examine each packet
很简单。只需打开与服务器的 HTTPS 连接,请求资源,然后获取结果,一次 1024 个字节。我肯定成功地建立了 HTTPS 连接,所以这根本不是问题。
但是,我发现src.read(1024)
每次调用都返回相同的内容。它只返回响应的前 1024 个字节,显然从不跟踪文件中的游标。
那么我应该如何一次接收 1024 个字节呢?上的文档read()
非常稀疏。我曾考虑过使用 urllib 或 urllib2,但似乎都无法建立 HTTPS 连接。
HTTPS 是必需的,我在一个相当受限的公司环境中工作,像Requests这样的包有点难以掌握。如果可能的话,我想在 Python 的标准库中找到一个解决方案。
// 大老胖编辑
结果在我的原始代码中我只是忘记更新d
变量。我用yield
循环外的读取对其进行了初始化,并且从未在循环中更改过它。一旦我将它添加回那里,它就可以完美运行。
所以,简而言之,我只是一个大白痴。