使用 urllib2 获取纯文本,结果不完整

Using urllib2 to fetch plain text, result isn't full

我正在编写一个 python 脚本来解析 jenkins 作业结果。我正在使用 urllib2 获取 consoleText,但我收到的文件不完整。获取文件的代码是:

data = urllib2.urlopen('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = data.readlines()

我得到的行数是 2306 行,而控制台日志中的实际行数是 37521。我可以通过 wget:

检查购买获取文件
$ wget 'http://<server>/job/<jobname>/<buildid>/consoleText'
$ wc -l consoleText
37521

为什么 urlopen 没有给我完整的结果?

更新:

使用 requests(如@svrist 建议的那样)而不是 urllib2 没有这样的问题,所以我正在切换到它。我的新代码是:

data = requests.get('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = [l for l in data.iter_lines()]

但我仍然不知道为什么 urllib2.urlopen 不能正常工作。

使用 chunked encoding response 返回 Jenkins 构建日志。

Transfer-Encoding: chunked

根据几个 other questions,似乎 urllib2 没有处理整个响应,正如您所观察到的,只有 returns 第一个块。

我还推荐使用 requests 包。