Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2009 23:07:14

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Бьется файл при загрузке

import cookielib
import urllib2

class UrlRequest(object):
data = ''
cookies = cookielib.CookieJar()
handle = None
opener = None
def __init__(self, proxy='', cookies=None):
if cookies == None:
cookies = self.cookies
cookie_handler = urllib2.HTTPCookieProcessor(cookies)
if proxy:
proxy_handler = urllib2.ProxyHandler({'http': proxy})
opener = urllib2.build_opener(proxy_handler, cookie_handler)
else:
opener = urllib2.build_opener(cookie_handler)
self.cookies = cookies
self.opener = opener

def open(self, url, data=None):
self.handle = self.opener.open(url, data)
self.data = self.handle.read()
return self

def store(filename, data, method="w"):
fh = file(filename, method)
fh.write(data)
fh.close()

image = UrlRequest().open('http://ya.ru/logo.gif').data
store('image.gif', image)



Отредактировано (Май 20, 2009 23:09:12)

Офлайн

#2 Май 20, 2009 23:16:47

Nbush
От:
Зарегистрирован: 2007-05-28
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Бьется файл при загрузке

nerezus
def store(filename, data, method=“w”):
Скорее всего надо: method=“wb”



Офлайн

#3 Май 20, 2009 23:28:55

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Бьется файл при загрузке

о_О
А по умолчанию они не бинарные? о_О

Спасибо, заработало.

Как всегдпа проблема в отладке: надо было оба файла сравнить: увидел бы лишние \r



Офлайн

#4 Май 21, 2009 03:05:03

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Бьется файл при загрузке

nerezus
В винде - нет, под линуксом вроде как бинарные по-умолчанию.

Офлайн

#5 Май 21, 2009 09:06:40

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Бьется файл при загрузке

Мну для загрузки больших файлов юзает urllib.urlretrieve() - он ведет себя лучше намного, но не катит если необходимо качать и сцылко одноразовая, если сцылко не одноразовая - то можно сделать .geturl() в urllib2 (если ссылку нужно получать с куками) а потом urllib.urlretrieve(url, filename) По умолчанию там вроде бинарные права стоят



Отредактировано (Май 21, 2009 09:10:41)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version