|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
26.07.2006, 21:41
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Скачка файла
;|------------------------------------------------------|
;| ?2006 by www.Marius-Rabung.de | [email protected]|
;|------------------------------------------------------|
Function Download(Inputfile$,outputfile$, Port%=80)
Local host$
Local host_tmp
Local stream
Local file
;------------------------------- Den Host aus InputFile$ rausfiltern
host$=right(inputfile$,len(inputfile$)-7) ; http:// rausschneiden
host_tmp=instr(host$,"/")-1 ; Das erste Slash im String suchen und 1 abziehen
host$=left(host$,host_tmp) ; Den Text bis zu dem ersten Slash-1 k?rzen
;------------------------------ TCPStream zum Host ?ffnen
stream = OpenTCPStream(host$,Port%)
;------------------------------- Datei Anfordern
WriteLine stream, "GET "+Inputfile$+ " HTTP/1.1"
WriteLine stream, "Host: "+host$
WriteLine stream, ""
;------------------------------- Datei auf der Festplatte erstellen
file = writeFile(outputfile$)
;------------------------------- Das Ende des HTTP Headers suchen
For a=0 To 100
tmp$=ReadLine(stream)
If Instr(Lower$(tmp), "content-type")>0 Then ReadLine(stream) : Exit
Next
;------------------------------- Datei downloaden
While Not Eof(stream)
WriteByte file, ReadByte(stream)
Wend
;------------------------------- Alles wieder Schlie?en
CloseFile file
CloseTCPStream stream
End Function
взято с разрешения, от сюда:
http://www.freecoder.chat-blitz.de/
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
26.07.2006, 21:43
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Скачка файла
юзание
Download("http://mariusrabung.ma.funpic.de/Temp/Download.bb", "C:/Download.bb")
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
25.09.2010, 02:09
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Скачка файла
Чот напрягает меня заголовок цикла
Кто тут в протоколах шарил - не надо ли там поставить цикл до условия If Instr(Lower$(tmp), "content-type")>0 ?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
25.09.2010, 10:31
|
#4
|
Знающий
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений (для 257 пользователей)
|
Ответ: Скачка файла
Не надо. Этот цикл вообще от криворукости Нужно читать построчно заголовки пока не будут найдены подряд две пустые строки (\n\n) - они отделяют заголовки от тела. Ну автор вполне себе адекватно решил, что больше 100 заголовков не будет. Но только content-type может быть в любой позиции заголовков, а после него вполне себе content-length и что угодно другое. Оно в конце концов и запишется в файл, что естественно сделает его нечитаемым.
Ещё и файл может быть недоступен, тогда сервер вернёт соответствующий код результата (404, 403 и т.д), но проверки на это нету, а надо бы.
|
(Offline)
|
|
25.09.2010, 11:05
|
#5
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Скачка файла
Полезная штука,можно качать обновления игры на Blitz3d с сервера.
|
(Offline)
|
|
25.09.2010, 16:29
|
#6
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Скачка файла
Ещё многие сервера настроены, чтобы контент чунками отдавать, это другой механизм, отличный от Content-Length, оттуда тоже эта функция скачает с ошибками и файл будет битый. Да и вообще функция кривая, да.
|
(Offline)
|
|
25.09.2010, 19:30
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Скачка файла
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
26.09.2010, 03:17
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Скачка файла
предыдущий код тоже устарел.
http://blitzbasic.com/codearcs/codearcs.php?code=2279
вот это прошёл почти все мои тесты. Однако срезался на некоторых - в а именно, когда сервер не присылал в ответе content-length - почему он (сервер) это делал непонятно, однако (по идее) это является корректным ответом.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
26.09.2010, 16:00
|
#9
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Скачка файла
Сообщение от impersonalis
предыдущий код тоже устарел.
http://blitzbasic.com/codearcs/codearcs.php?code=2279
вот это прошёл почти все мои тесты. Однако срезался на некоторых - в а именно, когда сервер не присылал в ответе content-length - почему он (сервер) это делал непонятно, однако (по идее) это является корректным ответом.
|
Я же выше написал. Сервер может отдавать контент чунками, это фича протокола HTTP/1.1. Отправляется заголовок:
Transfer-Encoding: chunked
Почитать об этом можно в википедии для начала, а дальше гугл :
http://ru.wikipedia.org/wiki/Chunked_transfer_encoding
Я до позавчерашнего дня тоже думал, что это некорректный ответ и когда на PHP свой класс писал для HTTP давно как-то, тоже не знал как из такой ситуации выходить, и в итоге сделал всё на CURL. А вот позавчера надо было замутить простенький прокси-сервер и опять столкнулся с этой проблемой. Начал гуглить по названиям http заголовков, которые шлёт сервер, и вот на это вышел. Ты наверно тоже читаешь справку по HTTP/1.0, как и я раньше.
|
(Offline)
|
|
26.09.2010, 16:52
|
#10
|
Разработчик
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений (для 329 пользователей)
|
Ответ: Скачка файла
http://forum.boolean.name/showthread.php?t=12424
Net_SaveFile
И никаких проблем/ошибок/битых файлов.
__________________
299 792 458
|
(Offline)
|
|
26.09.2010, 21:15
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Скачка файла
Сообщение от Phantom
|
см. код
Case "transfer-encoding"
If Lower(l2$) = "chunked" Then chunk = True
Сообщение от DeeJex
|
. lib "blitz_net.dll"
Net_Init%()
Net_SaveFile%(url$,file$)
Net_GetHeader$(url$)
Net_GetUrlPart$(url$,par%,parc$)
Net_SetUrlPart$(url$,par%,parc$,val$)
Net_UrlEncode$(url$)
Net_UrlDecode$(url$)
|
я вообще планировал в память файл заливать,а не винт дрючить.
Но тем, у кого были другие цели - может подойти
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:56.
|