使用stream=True的Python请求无法根据机器遍历内容



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

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 = requests.get(url, stream=True)

这段代码在我自己的机器/网络上正常工作,我没有任何问题。然而,当我将其上传到服务器时,有时iter_content()返回空迭代器(当我第一次调用it.next()时,它会抛出StopIteration异常)。这只发生在一些(实际上,大多数)网站上,总是一样的。

我已经在控制台/解释器中测试了它,如果我删除stream=True参数,它按预期工作,但我无法删除它,因为我只需要从页面下载最大数量的字节(以避免网络拥塞)。我已经从pip升级到最新的请求包,并确保在我的开发和生产机器上的库是相同的。

我的猜测是,有一个Linux标志的地方停止一些流连接?(在开发机器上使用ubuntu,在生产服务器上使用Debian)。

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

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

你可能想看看Byte服务

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

相关内容

  • 没有找到相关文章

最新更新