我正在尝试使用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,但是从其他位置获取。
答案 0 :(得分:5)
我在不同的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)
这对你有用吗?