Быстрое качивание файла по http
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Быстрое качивание файла по http
|
|
|
|
|
Прога должна КАК МОЖНО БЫСТРЕЕ скачать большое количество htm и html файлов. С помощью чего это
лучше сделать? Если можно, приведите участок кода, демонстрирующий процесс скачивания файла. Спасибо. |
|
Сообщ.
#2
,
|
|
|
|
Э-э-э... А пример WinAPI?
|
|
Сообщ.
#3
,
|
|
|
|
Можно проще:
![]() ![]() InternetOpen InternetOpenUrl InternetReadFile - один или более раз InternetCloseHandle Ну а пример поищи на форуме, он был. Только сразу предупрежу, если качка предполагается через прокси требующий авторизации, то не прокатит. Как с этим бороться, никто так и неответил. |
|
Сообщ.
#4
,
|
|
|
|
THANKS!
|
|
Сообщ.
#5
,
|
|
|
|
Цитата Lucifer, 22.01.04, 13:38 1. Как пройти авторизацию, сели прокся с паролем. HttpQueryInfo из получаем статус(третий параметр), если он равен HTTP_STATUS_PROXY_AUTH_REQ, тогда InternetSetOption Наконец-то. Этот вопрос возникал здесь неоднакротно, но никто не предлагал этого способа. К сожалению сейчас мне не доступна та сетка в которой я имел проблему. Но при случае обязательно попробую. Спасибо. Цитата Lucifer, 22.01.04, 13:38 2. По поводу "проще" Петровича. Твой метод сработает, если "сервер поддерживает чего-то там" А от куда эта инфа? В MSDN ничего такого не сказано. |
|
Сообщ.
#6
,
|
|
|
|
а как поступать если файл который нужно скачать лежит в дирректории запароленной апачем???
|
|
Сообщ.
#7
,
|
|
|
|
С авторизацией при загрузке разобрался...
но ещё надо перед загрузкой из этой дирриктории получить информациею о размере файлов которые там лежат. делаю в цикле ниже представленный код в котором переменная detectfile является файлом размер которого пытаюсь узнать. так вот на 3-ем шаге цикла всё стопорится на HttpSendRequest(hUrl,nil,0,nil,0). просто зависает и ничего не происходит ![]() 1-й и 2-й шаг работает корректно. тело цикла: try hUrl := HttpOpenRequest(hConnect,'GET', PAnsiChar(detectfile) , nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0); HttpSendRequest(hUrl,nil,0,nil,0); dwBufferLen := 20; dwIndex := 0; HttpQueryInfo(hUrl,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex); if dwIndex = 1 then sSize := PChar(@dwBuffer) else sSize := ''; finally InternetCloseHandle(hURL) end; в чём может быть дело??? или как это можно сделать по другому? |
|
Сообщ.
#8
,
|
|
|
|
Организация доступа для загрузки страничек в TWebBrowser через прокси:
![]() ![]() var PIInfo : PInternetProxyInfo ; begin New (PIInfo) ; PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ; PIInfo^.lpszProxy := PChar('200.197.101.194:80'); PIInfo^.lpszProxyBypass := PChar(''); UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0); WebBrowser1.Navigate(Edit1.Text); Dispose (PIInfo) ; end; Получение полного исходника HTML ![]() ![]() var HTMLDocument: IHTMLDocument2; PersistFile: IPersistFile; begin ... HTMLDocument := WebBrowser1.Document as IHTMLDocument2; PersistFile := HTMLDocument as IPersistFile; PersistFile.Save(StringToOleStr('test.htm'), True); while HTMLDocument.readyState <> 'complete' do Application.ProcessMessages; ... end; или while WB.Document = nil do Application.ProcessMessages; Document:= WB.Document as IHtmlDocument2; Text:= Document.body.InnerHTML; Заполнение полей формы открытой страницы и нажатие на кнопку ![]() ![]() Web.OleObject.Document.all.tags('FORM').item(0).item('To').value:='username'; Web.OleObject.Document.all.tags('FORM').item(0).item('textfield_password\').value:='password'; Web.OleObject.Document.all.tags('FORM').item(0).item('submit_button_name\').click(); Блокировка загрузки картинкок, НЕЗАВИСИМО от настроек Internet Explorera ![]() ![]() IDocHostUIHandler.FilterDataObject |
|
Сообщ.
#9
,
|
|
|
|
Уже совсем ничего не понимаю...
есть такая вот функция... грузит с инета файл fileUrl на веник с именем filename... так вот... она грузит и всё бы хорошо... но на выходе из функции, вернее на последней её строчке перед эндом вылетает эксепшен "Access violation at address...". и ей совершенно не важно какая именно строчка последняя... короче говоря что то тут не так... может есть какие мысли по этому поводу??? Цитата function TInetUpdForm.GetInetFileEx(fileUrl, filename: string): boolean; var hInet, //<-переменная сод. указатель на сессию hConnect, // указатель на http server hURL:HINTERNET; //<-указатель на URL fSize :DWORD; //<-размер файла f:file; //<-файл куда качаем sSize :string; //<-размер statusSize : integer; sUrl : string; strUserName,strPassword: string; dwBuffer: Pointer; dwBufferLen, dwIndex: DWORD; Buffer : array[1..1024]of byte; BufferLen : DWORD; loginLen, PassLen : integer; psURL,pstrUserName,pstrPassword : PChar; begin stop := false; fSize:=0; sSize := ''; // инициализация параметров (логин пароль дирриктория) if DefCommonParams.BaseType then sUrl := 'updsi/' + fileurl else sUrl := 'updvi/' + fileurl; strUserName := DefCommonParams.login; strPassword := DefCommonParams.pass; psUrl := strNew(PChar(sUrl)); pstrUserName:= strNew(PChar(strUserName)); pstrPassword:= strNew(PChar(strPassword)); loginlen := strlen(pstrUserName); passlen := strlen(pstrPassword); //открываем сессию hInet := InternetOpen('Mozilla', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0); //открываем сервер hConnect := InternetConnect(hInet,'www.server.by', INTERNET_DEFAULT_HTTP_PORT, pstrUserName, pstrPassword, INTERNET_SERVICE_HTTP,0,0); try hUrl := HttpOpenRequest(hConnect,'GET',psUrl,nil,nil,nil,INTERNET_FLAG_KEEP_CONNECTION,0); HttpSendRequest(hUrl,nil,0,nil,0); dwIndex := 0; dwBufferLen := 20; HttpQueryInfo(hUrl,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex); if dwIndex = 1 then sSize := PChar(@dwBuffer); InternetSetOption(hUrl, INTERNET_OPTION_USERNAME,pstrUserName, loginLen); InternetSetOption(hUrl, INTERNET_OPTION_PASSWORD,pstrPassword, passLen); fSize := strToInt(sSize); fSize := round(fsize/1024); dStatus.MinValue := 0; dStatus.MaxValue := fSize; dStatus.Progress := 0; AssignFile(f, FileName); Rewrite(f,1); BufferLen := 20; while (BufferLen<>0) and (not stop) do begin InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); statusSize := round(BufferLen/1024); dStatus.Progress := dStatus.Progress + statusSize; BlockWrite(f, Buffer, BufferLen); Application.ProcessMessages; end; InternetCloseHandle(hURL); CloseFile(f); except InternetCloseHandle(hURL); CloseFile(f); end; dStatus.Progress := 0; InternetCloseHandle(hConnect); InternetCloseHandle(hInet); strDispose(psUrl); strDispose(pstrUserName); strDispose(pstrPassword); result := not stop; stop := false; end; Добавлено в : что я заметил... всё портит вот эта вещь Цитата HttpQueryInfo(hUrl,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex); если не получать информацию о размере файла то работает всё корректно... без всяких эксепшенов... может я чё та не знаю???? |
|
Сообщ.
#10
,
|
|
|
|
вопрос Art4 по поводу:
Web.OleObject.Document.all.tags('FORM').item(0).item('To').value:='username'; Web.OleObject.Document.all.tags('FORM').item(0).item('textfield_password\').value:='password'; Web.OleObject.Document.all.tags('FORM').item(0).item('submit_button_name\').click(); эта фишка работает для всех тэгов кроме <input type='file' name='filename'>. если воспользоваться Web.OleObject.Document.all.tags('FORM').item(0).item('filename').value:='pathToFile'; то файл не аплоадится ![]() может, для этого элемента вместо value надо использовать другое поле? не могу разобраться. может, кто-то поможет? |