Я загружаю файл с помощью Python urllib2. Как я проверяю, насколько большой размер файла?

Ниже ответа теперь продвигает четыре года, таким образом, стоит отметить, что собственная поддержка браузера для getElementsByClassName() добралась партия лучше. Но если необходимо поддерживать более старые браузеры, тогда...

Использование один это было уже записано. Большинство крупнейших библиотек JS включает один в некоторую форму или другого, но если Вы не используете одного из них тогда, я могу рекомендовать превосходную реализацию Robert Nyman:

http://code.google.com/p/getelementsbyclassname/
http://www.robertnyman.com/2008/05/27/the-ultimate-getelementsbyclassname-anno-2008/

существует только слишком много способов сделать эту (концептуально простую) стандартную программу медленной и ошибочной для выравнивания по ширине записи собственной реализации в этой точке.

9
задан TIMEX 28 October 2009 в 11:19
поделиться

3 ответа

There's no need as bobince did and drop to httplib. You can do all that with urllib directly:

>>> import urllib2
>>> f = urllib2.urlopen("http://dalkescientific.com")
>>> f.headers.items()
[('content-length', '7535'), ('accept-ranges', 'bytes'), ('server', 'Apache/2.2.14'),
 ('last-modified', 'Sun, 09 Mar 2008 00:27:43 GMT'), ('connection', 'close'),
 ('etag', '"19fa87-1d6f-447f627da7dc0"'), ('date', 'Wed, 28 Oct 2009 19:59:10 GMT'),
 ('content-type', 'text/html')]
>>> f.headers["Content-Length"]
'7535'
>>> 

If you use httplib then you may have to implement redirect handling, proxy support, and the other nice things that urllib2 does for you.

20
ответ дан 4 December 2019 в 07:35
поделиться

Вы могли бы сказать:

maxlength= 12*1024*1024
thefile= urllib2.urlopen(request).read(maxlength+1)
if len(thefile)==maxlength+1:
    raise ThrowToysOutOfPramException()

, но тогда, конечно, вы все равно прочитали 12 МБ нежелательных данных. Если вы хотите свести к минимуму риск этого, вы можете проверить заголовок HTTP Content-Length, если он есть (возможно, его нет). Но для этого вам нужно перейти к httplib вместо более общего urllib.

u= urlparse.urlparse(ep_url)
cn= httplib.HTTPConnection(u.netloc)
cn.request('GET', u.path, headers= {'User-Agent': ua})
r= cn.getresponse()

try:
    l= int(r.getheader('Content-Length', '0'))
except ValueError:
    l= 0
if l>maxlength:
    raise IAmCrossException()

thefile= r.read(maxlength+1)
if len(thefile)==maxlength+1:
    raise IAmStillCrossException()

Вы можете проверить длину, прежде чем запрашивать файл, если хотите. Это в основном то же самое, что и выше, за исключением использования метода 'HEAD' вместо 'GET' .

7
ответ дан 4 December 2019 в 07:35
поделиться

вы можете сначала проверить длину содержимого в запросе HEAD, но имейте в виду, этот заголовок не должны быть установлены - см. Как отправить HTTP-запрос HEAD в Python 2?

1
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: