ra.eremeev Опубликовано 10 января, 2016 Поделиться Опубликовано 10 января, 2016 Друзья, стоит задача по обмену служебными данными с WEB-сервера (файл базы данных) - можно через FTP, можно через HTTP. Подскажите, пож-та, как обеспечить получение приложением файла из инета? Желательно с возможностью проверки целостности передачи... Пробовал TiDFTP, но все время файлы битые получаются Цитата Ссылка на комментарий
0 krapotkin Опубликовано 10 января, 2016 Поделиться Опубликовано 10 января, 2016 binary не забыл включить? а то очень сомнительная инфа... Цитата Ссылка на комментарий
0 ra.eremeev Опубликовано 10 января, 2016 Автор Поделиться Опубликовано 10 января, 2016 Спасибо за ответ! Нет, не забыл Но работает не стабильно - в некоторых случаях файл получается битым. А иногда и не грузится вовсе - приложение висит просто... Ошибок не выдает Инет есть и на других устройствах он стабилен... Подскажите, пож-та, как можно контролировать наличие соединения с Инетом? Цитата Ссылка на комментарий
0 krapotkin Опубликовано 10 января, 2016 Поделиться Опубликовано 10 января, 2016 с http.get не было проблем никогда проверить можно , скачивая к-нить файлик из инета Цитата Ссылка на комментарий
0 ra.eremeev Опубликовано 11 января, 2016 Автор Поделиться Опубликовано 11 января, 2016 krapotkin, http.get - iDHTTP.GET ? Можно пример скачивания файла по HTTP? Цитата Ссылка на комментарий
0 Axbor Опубликовано 11 января, 2016 Поделиться Опубликовано 11 января, 2016 (изменено) Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; Что бы программа не завис при загрузки файла, нужно использовать поток. Изменено 11 января, 2016 пользователем Axbor Kitty 1 Цитата Ссылка на комментарий
0 ra.eremeev Опубликовано 11 января, 2016 Автор Поделиться Опубликовано 11 января, 2016 (изменено) Axbor, спасибо! Т.е., загрузку файла (код, который предложен) запускать через поток? Верно? И еще вопрос: без потока приложение будет всегда зависать с этим кодом, или только при загрузке больших файлов или при слабом соединении? Изменено 11 января, 2016 пользователем ra.eremeev Цитата Ссылка на комментарий
0 masmat Опубликовано 12 января, 2016 Поделиться Опубликовано 12 января, 2016 Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; Что бы программа не завис при загрузки файла, нужно использовать поток. А как запихнуть этот код в поток? что бы параллельно работала программа и скачивался файл. Пример можно в студию Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 12 января, 2016 Модераторы Поделиться Опубликовано 12 января, 2016 (изменено) uses System.Threading; TTask.Run(procedure begin Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; end); Изменено 12 января, 2016 пользователем ZuBy Kitty, zairkz и masmat 3 Цитата Ссылка на комментарий
0 krapotkin Опубликовано 12 января, 2016 Поделиться Опубликовано 12 января, 2016 h:TidHTTP; st:TMemoryStream; st:=TMemoryStream.Create; h:=TIdHttp.Create(NIL); h.Get(URL, st); st.SaveToFile(fileName); h.free; st.free; Kitty 1 Цитата Ссылка на комментарий
0 Kitty Опубликовано 12 января, 2016 Поделиться Опубликовано 12 января, 2016 uses System.Threading; TTask.Run(procedure begin Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; end); ZuBy, а как Ваш код будет на С++ Builder выглядеть? Спасибо. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 12 января, 2016 Модераторы Поделиться Опубликовано 12 января, 2016 uses System.Threading; TTask.Run(procedure begin Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; end); ZuBy, а как Ваш код будет на С++ Builder выглядеть? Спасибо. не силен в С++, но думаю также #include <System.Threading.hpp> TTask::Run(_di_TProc(// тут остальной код))); справочка Kitty и zairkz 2 Цитата Ссылка на комментарий
0 Axbor Опубликовано 12 января, 2016 Поделиться Опубликовано 12 января, 2016 (изменено) void __fastcall TForm1::Button1Click(TObject *Sender) { TThread::Synchronize(TThread::CurrentThread, getFile); } void TForm1::getFile() { TMemoryStream *MS = new TMemoryStream; IdHTTP1->Get("YOUR URL", MS); MS->SaveToFile("*.*"); delete MS; } Изменено 12 января, 2016 пользователем Axbor zairkz и Kitty 2 Цитата Ссылка на комментарий
0 Axbor Опубликовано 12 января, 2016 Поделиться Опубликовано 12 января, 2016 #include <System.Threading.hpp> TTask::Run(_di_TProc(// тут остальной код))); Чем отличается TThread::Synchronize(TThread::CurrentThread, getFile); от вашего кода TTask::Run(_di_TProc()); что где лучше использовать? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 12 января, 2016 Модераторы Поделиться Опубликовано 12 января, 2016 Тем что в моем коде выполнение будет в дополнительном потоке, а у вас в основом Цитата Ссылка на комментарий
0 ra.eremeev Опубликовано 12 января, 2016 Автор Поделиться Опубликовано 12 января, 2016 Друзья, спасибо! Вот какой вопрос возник по теме: может ли работа iDHTTP и частое использование команды Bitmap.LoadFromUrl (uses FMX.Features.Bitmap.Helpers) восприниматься веб-сервером как DDOS-атака? Именно так вебмауэр моего хостинг-провайдера реагирует на работу этих компонентов/команд. После 200-300 обращений происходит блокирование моего IP. В работе приложения активно используются графические изображения, подгружаемые с сервера через Bitmap.LoadFromUrl (приложение отображает список мероприятий, и для каждого мероприятия на сервере имеется свой небольшой графический файл-афиша размером 15-20 кБ). Зацикливаний и пустой долбежки в коде нет. Но блокировки есть. Может, не те компоненты/решение выбрал. Что посоветуете в такой ситуации? Цитата Ссылка на комментарий
0 ra.eremeev Опубликовано 12 января, 2016 Автор Поделиться Опубликовано 12 января, 2016 Сам отвечу на свой же вопрос: DDOS-атака идентифицируется благодаря Bitmap.LoadFromUrl (uses FMX.Features.Bitmap.Helpers). В процедуре используется связка: инициализация idhttp и закрытие соединения (удаление) idhttp. Множественные сессии и вызывают схожесть с DDOS... zairkz 1 Цитата Ссылка на комментарий
0 master webs Опубликовано 13 января, 2016 Поделиться Опубликовано 13 января, 2016 сохраняйте изображение на устройстве и проверяйте наличие события на сайте если события нет то изображение можно удалить Цитата Ссылка на комментарий
0 cs_diehard Опубликовано 30 августа, 2016 Поделиться Опубликовано 30 августа, 2016 По теме вопрос IdHttp компонент как настроить для подключения без SSL или место него какой компонент использовать? а то приходится таскать библиотеки для SSL Цитата Ссылка на комментарий
0 krapotkin Опубликовано 30 августа, 2016 Поделиться Опубликовано 30 августа, 2016 System.Net.Httpclient THttpClient Цитата Ссылка на комментарий
0 cs_diehard Опубликовано 30 августа, 2016 Поделиться Опубликовано 30 августа, 2016 спасибо получился Цитата Ссылка на комментарий
Вопрос
ra.eremeev
Друзья, стоит задача по обмену служебными данными с WEB-сервера (файл базы данных) - можно через FTP, можно через HTTP.
Подскажите, пож-та, как обеспечить получение приложением файла из инета? Желательно с возможностью проверки целостности передачи...
Пробовал TiDFTP, но все время файлы битые получаются
Ссылка на комментарий
20 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.