1

所以,我使用下面的代码片段来获取网页的一部分并解析它(与这个问题无关)。

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),指定资源的最大允许返回值?我无法测试标题,因为某些网站没有内容长度。

4

1 回答 1

0

或者,如何发出 HTTP 请求(GET),指定资源的最大允许返回值?我无法测试标题,因为某些网站没有内容长度。

您可能想查看字节服务

字节服务是仅从服务器向客户端发送 HTTP/1.1 消息的一部分的过程。字节服务使用RangeHTTP 请求标头Accept-RangesContent-RangeHTTP 响应标头。

于 2013-05-29T09:58:41.590 回答