所以,我使用下面的代码片段来获取网页的一部分并解析它(与这个问题无关)。
def load_max_resp(self, resp, size=4096):
it = resp.iter_content()
file_str = StringIO()
for i in xrange(size):
try:
file_str.write(it.next())
except StopIteration:
break
return file_str.getvalue()
resp 元素加载:
resp = requests.get(url, stream=True)
这段代码在我自己的机器/网络上正常工作,我没有任何问题。但是,当我将它上传到我的服务器时,有时会iter_content()
返回一个空迭代器(当我it.next()
第一次调用它时,它会抛出StopIteration
异常)。这只发生在一些(大多数,实际上)网站上,总是一样的。
我已经在控制台/解释器中对其进行了测试,如果我删除了stream=True
它按预期工作的参数,但我无法删除它,因为我只需要从页面下载最大数量的字节(以避免网络拥塞)。我已从 pip 升级到最新的 requests 包,并确保该库在我的开发和生产机器上是相同的。
我的疯狂猜测是某处有一个 Linux 标志停止了某些流连接?(在开发机器上使用 ubuntu,在生产服务器上使用 Debian wheezy)。
或者,如何发出 HTTP 请求(GET),指定资源的最大允许返回值?我无法测试标题,因为某些网站没有内容长度。