2

我正在尝试使用urllib2.urlopen(实际上,我正在使用mechanize,但这是mechanize调用的方法)获取页面当我获取页面时,我收到不完整的响应;页面被截断。但是,如果我访问页面的非 HTTPS 版本,我会得到完整的页面。

我在 Arch Linux ( 3.5.4-1-ARCH x86_64) 上。我正在跑步openssl 1.0.1c。这个问题出现在我拥有的另一台 Arch Linux 机器上,但在使用 Python 3 ( 3.3.0) 时不会出现。

这个问题似乎与urllib2 not retrieving entire HTTP response有关。

我在唯一可以让我使用 urllib2 ( Py I/O ) 的在线 Python 解释器上对其进行了测试,它按预期工作。这是代码:

import urllib2

u = urllib2.urlopen('https://wa151.avayalive.com/WAAdminPanel/login.aspx?ReturnUrl=%2fWAAdminPanel%2fprivate%2fHome.aspx')

print u.read()[-100:]

最后几行应该包含通常的</body></html>.

当我在我的机器上尝试urllib.urlretrieve时,我得到:

ContentTooShortError: retrieval incomplete: got only 11365 out of 13805 bytes

我无法urlretrieve在在线解释器上进行测试,因为它不允许用户写入临时文件。晚上晚些时候,我将尝试从我的机​​器上获取 URL,但来自不同的位置。

4

1 回答 1

6

我在不同的 Linux 系统上使用 Python 2.7 遇到了同样的错误:

>>> urllib.urlretrieve('https://wa151.avayalive.com/WAAdminPanel/login.aspx?ReturnUrl=%2fWAAdminPanel%2fprivate%2fHome.aspx')
---------------------------------------------------------------------------
ContentTooShortError                      Traceback (most recent call last)
...
ContentTooShortError: retrieval incomplete: got only 11365 out of 13805 bytes

但是,可以使用以下命令完成相同的操作(并且实际上对我有用)requests

>>> import requests
>>> r = requests.get('https://wa151.avayalive.com/WAAdminPanel/login.aspx?ReturnUrl=%2fWAAdminPanel%2fprivate%2fHome.aspx')
>>> with open(somefilepath, 'w') as f:
...     f.write(r.text)

这对你有用吗?

于 2012-11-04T20:43:33.340 回答