Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите, плиз, со скачиванием файла из интернета.


Muhh ©   (2007-02-27 20:38:00) 

Испльзую вот такую функцию. Но..недостатки следующие:
я скачиваю файл с сайта, где есть авторизация... то есть для того чтобы мне программно его скачать надо сначала авторизироваться в Internet Explorer. Так вот загвоздка именно в том, что именно в IE. Почему в мазиле или опере нельзя? именно в  ИЕ.
Так вот отсюда вопрос:
может есть какая нибудь подобная функция, чтобы можно было авторизироваться в каком угодно браузере перед закачкой.
Или в этой функции чтонибудь подправить.

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('STEROID 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 else begin
       MessageDlg('Не могу скачать файл! Проверьте соединение с Internet', mtCustom,[mbYes], 1);
       Form1.Close;
   end;
   InternetCloseHandle(hSession);
 end
end;


zap8   (2007-03-04 08:50:00) [1]

Тебе надо в заголовке который указывантся как один из
пераметров функции InternetOpenURL добавить поле
по стандарту HTTP протокола с ответом серверу на
полученный запрос от сервера на автоизацию, а другие клиеты здесь не причем, конечно ты или пользователь должен знать и пороль и имя.

function InternetOpenUrlA(hInet: HINTERNET; lpszUrl: PAnsiChar;
  lpszHeaders: PAnsiChar; dwHeadersLength: DWORD; dwFlags: DWORD;
 dwContext: DWORD): HINTERNET; stdcall;

Заголовок формируется по стандартным правилам. Одним словом
без изучения RFC по HTTP протоколу пользоваться функциями WinInet
одна головная боль, появятся и другие проблеммы, не только автоизация.


muhh   (2007-03-03 18:24:00) [2]

к сожалению это для меня сложно :) мало чего я понимаю в этом


DiamondShark   (2007-02-28 12:36:00) [3]


> может есть какая нибудь подобная функция, чтобы можно было
> авторизироваться в каком угодно браузере перед закачкой.
>

Конечно есть.
HTTP протокол абсолютно индеферентен к используемым клиентам.

Какие-либо ограничения могут вводиться только прикладной логикой сервера на основании полученной от клиента информации.
Поставь какой-нибудь HTTP-сниффер, проведи успешный сеанс, и посмотри внимательно что передаётся серверу, что он отвечает, потом воспроизведи.


muhh   (2007-02-27 23:02:00) [4]

раздражает такая тема...я эксплорером уже давно не пользуюсь :(


Alexey (AZ)   (2007-02-27 20:56:00) [5]

Я думаю что копать надо в сторону кукезов... Как это по-АПИшному - не знаю. Сдается мне ещё что можно слать авторизацию через сокеты, но это уже надо куритьсовсем другие мануалы, RFC например.


Наверх

Титульная страница Поиск, карта сайта Написать письмо