Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как скачать файл? 
:(
    Опции темы
Conclat
Дата 12.4.2004, 00:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Сталкнулся с такой проблеммой:
Необходимо в определенное время скачать файл по ссылке в интернете и сохранить его на жестком диске в определенной директории. Желательно, чтобы это всё происходило без участия человека. Соединение с интернетом - постоянное.
Нужен пример на Delphi.
  Вверх
dm9
Дата 12.4.2004, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



В общем, ты, как это обычно бывает, забил на ФАК. Я уж даже говорить об этом не хочу...

Статья из ФАКА:

Цитата
Как скачать любой URL используя стандартные настройки сети?
Previous  Top  Next 

Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.

Ниже приведён пример использования этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д.

Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.

function DownloadFile(const Url: string): string;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1024] of char;
  BytesRead: cardinal;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

  if Assigned(NetHandle) then
    begin

      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

      if Assigned(UrlHandle) then
{ UrlHandle правильный? Начинаем загрузку }
        begin
          FillChar(Buffer, SizeOf(Buffer), 0);
          repeat
            Result := Result + Buffer;
            FillChar(Buffer, SizeOf(Buffer), 0);
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
          until BytesRead = 0;
          InternetCloseHandle(UrlHandle);
        end
      else
        begin
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
          raise Exception.CreateFmt('Cannot open URL %s', [Url]);
        end;

      InternetCloseHandle(NetHandle);
    end
  else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
    raise Exception.Create('Unable to initialize Wininet');
end;

Взято с Исходников.ru http://www.sources.ru


По её мотивам - процедурка, скачивающая файл. Назначение параметров очевидно.
Подключать модуль WinInet

Код
procedure DownloadFile (const url: string; const savefile : String);
var
  NetHandle : HINTERNET;
  UrlHandle : HINTERNET;
  Buffer    : packed array [0..1023] of byte;
  BytesRead : Cardinal;
  f         : file;
begin
  NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
  begin
     UrlHandle := InternetOpenUrl (NetHandle, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
     if Assigned (UrlHandle)
     then
     begin
        AssignFile (f, savefile);
        ReWrite (f, 1);
        InternetReadFile (UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
        while BytesRead <> 0 do
        begin
           BlockWrite (f, Buffer, BytesRead);
           InternetReadFile (UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
        end;
        InternetCloseHandle(UrlHandle);
        CloseFile (f);
     end
     else
     begin
        raise Exception.CreateFmt ('Cannot open URL %s', [Url]);
     end;
     InternetCloseHandle(NetHandle);
  end
  else
     raise Exception.Create ('Unable to initialize Wininet');
end;

Добавлено @ 01:21
Можешь сам туда индикатор прикрутить. Как это сделать - очевидно.
Добавлено @ 01:22
PS Можно тоже в ФАК засунуть...
PM MAIL ICQ   Вверх
Alex
Дата 12.4.2004, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Все это конечно хорошо говорить, но когда в интернет имеешь доступ через прокси, да к тому же он не поддерживает анонимного входа, то все ваши примеры можно смело отправлять в утиль.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Гость_Леонид
Дата 6.7.2004, 07:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











>alex-co ты че барзеешь брат, тебе дали реальный пример, если ты немого покопаешь в уазанную сторону, то найдешь и работу чрезе прокси и авторизацию все что хоешь

  Вверх
Alex
Дата 6.7.2004, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата
>alex-co ты че барзеешь брат, тебе дали реальный пример, если ты немого покопаешь в уазанную сторону, то найдешь и работу чрезе прокси и авторизацию все что хоешь

И можно увидеть пример ваших копаний? mad.gif
Да и не забудьте проверить свой пример на ISA.

Это сообщение отредактировал(а) alex-co - 6.7.2004, 08:08


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 6.7.2004, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



А лучше прочитайте http://forum.sources.ru/index.php?showtopi...ternetopen&st=0 и все поймете


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
RA
Дата 7.7.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Как скачать фаил:

Код

function DownloadFile(const FileURL, FileName: String): Cardinal;
var
 hSession, hFile: HInternet;
 Buffer: array[1..1024] of Byte;
 BufferLen, fSize: LongWord;
 f: File;
begin
 Result := 0;
 hSession := InternetOpen('Download',
                          INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned(hSession) then begin
   hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
                            INTERNET_FLAG_RELOAD, 0);
   if Assigned(hFile) then begin
     AssignFile(f, FileName);
     Rewrite(f,1);
     fSize := 0;
     repeat
       InternetReadFile(hFile, @Buffer, SizeOf(Buffer), BufferLen);
       BlockWrite(f, Buffer, BufferLen);
       fSize := fSize + BufferLen;
     until (BufferLen = 0);
     CloseFile(f);
     Result := fSize;
     InternetCloseHandle(hFile);
   end;
   InternetCloseHandle(hSession);
 end;
end;


А если через прокси, то прошу обратить внимание на функцию
"InternetOpen"

Код
function InternetOpen(lpszAgent: PChar;
                     dwAccessType: DWORD;
                     lpszProxy, lpszProxyBypass: PChar;
                     dwFlags: DWORD): HINTERNET; stdcall;

Добавлено @ 17:01
Цитата(alex @ 6.7.2004, 08:22)
А лучше прочитайте http://forum.sources.ru/index.php?showtopi...ternetopen&st=0 и все поймете

Сылка не работает (Уменя)

Это сообщение отредактировал(а) RAdmin - 7.7.2004, 17:00
PM   Вверх
Alex
Дата 7.7.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



ссылка работает


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.