Форум сайта python.su
Вот есть простой код
import httplib, re
con=httplib.HTTPConnection('www.sitename.ru:80')
print 'Start...'
def download_post(types = 'srt', range1 = 1, range2 = 5):
useragent='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1'
headers={'Content-Type':'application/x-www-form-urlencoded', 'User-Agent':useragent}
for i in range(range1, range2):
print types, i
body=types+'='+str(i)
con.request('POST', '/base.php', body, headers)
temp=con.getresponse()
data=temp.read()
req = re.findall('windows',data)
if req:
print 'no data'
continue
else:
filename=types+'/'+str(i)+'.rar'
f = open(filename,'wb')
#print data
f.write(data)
f.close()
download_post('srt', 1, 6000)
Офлайн
Так настоящие имя файла можно получить через
temp.getheaders()
А вот со второй проблемой что делать не знаю. Опытным путём понял что проблема в строках которые должны оканчиваться LF. Мой скрипт добовляет к ним CR. Т.е. в оригинале “строка”LF, а у меня “строка”CRLF. Я же ставлю бинарную запись почему так получается?…
Отредактировано (Авг. 12, 2010 14:56:22)
Офлайн
Добавил в конец
if os.path.isdir(filename):
print filename, “Directory!”
continue
data = open(filename, “rb”).read()
if ‘\0’ in data:
print filename, “Binary!”
continue
newdata = data.replace(“\r\n”, “\n”)
if newdata != data:
print filename
f = open(filename, “wb”)
f.write(newdata)
f.close()
Это стандартный конвертер виндоус ту юникс. Открывает находит CRLF и заменяет на LF
Отредактировано (Авг. 12, 2010 15:53:59)
Офлайн
Вообщем сколько не бился так и не могу понять в чём проблема. Хитрость в том что работает где то через раз. Т.е. качаю один тот же файл 10 раз скриптом в итоге в 50% случаев архив битый получается в других всё норм.
При этом если сравнивать файлы через нотпад++ то они полностью одинаковы даже переносы и концы строк. А вот бинарные различия есть из-за чего может проявляться данный баг?
Прошу у всех прощения оказывается код у меня был вполне рабочий. Просто сайт отдаёт битые архивы похоже специально. Защита у них такая от скачивания.
Отредактировано (Авг. 13, 2010 01:05:37)
Офлайн