2

を使用してページをフェッチしようとしていますurllib2.urlopen(実際にはを使用してmechanizeいますが、これはを呼び出すメソッドですmechanize)ページをフェッチすると、不完全な応答が返されます。ページが切り捨てられます。ただし、HTTPS以外のバージョンのページにアクセスすると、完全なページが表示されます。

私はArchLinuxを使用しています(3.5.4-1-ARCH x86_64)。私は走っていopenssl 1.0.1cます。この問題は、私が所有する別のArch Linuxマシンで発生しますが、Python 3(3.3.0)を使用している場合は発生しません。

この問題は、urllib2がHTTP応答全体を取得しないことに関連しているようです。

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 に答える