На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Быстрое качивание файла по http
    Прога должна КАК МОЖНО БЫСТРЕЕ скачать большое количество htm и html файлов. С помощью чего это
    лучше сделать? Если можно, приведите участок кода, демонстрирующий процесс скачивания файла.

    Спасибо.
      Э-э-э... А пример WinAPI?
        Можно проще:
        ExpandedWrap disabled
          InternetOpen
          InternetOpenUrl
          InternetReadFile - один или более раз
          InternetCloseHandle

        Ну а пример поищи на форуме, он был.
        Только сразу предупрежу, если качка предполагается через прокси требующий авторизации, то не прокатит. Как с этим бороться, никто так и неответил.
          THANKS!
            Цитата
            Lucifer, 22.01.04, 13:38
            1. Как пройти авторизацию, сели прокся с паролем.
            HttpQueryInfo из получаем статус(третий параметр), если он равен HTTP_STATUS_PROXY_AUTH_REQ, тогда
            InternetSetOption

            Наконец-то. Этот вопрос возникал здесь неоднакротно, но никто не предлагал этого способа. К сожалению сейчас мне не доступна та сетка в которой я имел проблему. Но при случае обязательно попробую. Спасибо.

            Цитата
            Lucifer, 22.01.04, 13:38
            2. По поводу "проще" Петровича. Твой метод сработает, если "сервер поддерживает чего-то там"

            А от куда эта инфа? В MSDN ничего такого не сказано.
              а как поступать если файл который нужно скачать лежит в дирректории запароленной апачем???
                С авторизацией при загрузке разобрался...

                но ещё надо перед загрузкой из этой дирриктории получить информациею о размере файлов которые там лежат.

                делаю в цикле ниже представленный код в котором переменная 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;

                в чём может быть дело???

                или как это можно сделать по другому?
                  Организация доступа для загрузки страничек в TWebBrowser через прокси:
                  ExpandedWrap disabled
                     
                    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
                  ExpandedWrap disabled
                     
                    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;


                  Заполнение полей формы открытой страницы и нажатие на кнопку
                  ExpandedWrap disabled
                     
                    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
                  ExpandedWrap disabled
                     
                    IDocHostUIHandler.FilterDataObject
                    Уже совсем ничего не понимаю...
                    есть такая вот функция... грузит с инета файл 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);


                    если не получать информацию о размере файла то работает всё корректно...
                    без всяких эксепшенов...

                    может я чё та не знаю????
                      вопрос 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 надо использовать другое поле? не могу разобраться. может, кто-то поможет?
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0.0650 ]   [ 15 queries used ]   [ Generated: 23.10.26, 23:00 GMT ]