На главную Наши проекты:
Журнал   ·   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_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как узнать размер файла в нете?
    Как узнать размер файла в нете?
      HttpQueryInfo
      ----
      Может в фак загоним это, или там уже есть ?
        Не фига в факе нету!
          ExpandedWrap disabled
            uses wininet;
            ...
            function GetUrlSize(const URL:string):integer;//результат в байтах
            var
              hSession,hFile:hInternet;
              dwBuffer:array[1..20] of char;
              dwBufferLen,dwIndex:DWORD;
            begin
            Result:=0;
            hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
            if Assigned(hSession) then begin
             hFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
             dwIndex:=0;
             dwBufferLen:=20;
             if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then Result:=StrToInt(StrPas(@dwBuffer));
             if Assigned(hFile) then InternetCloseHandle(hFile);
             InternetCloseHandle(hsession);
            end;
            end;
            Спасибо!!!!!!!!!!! :)
              Только имей ввиду, что ты получишь размер файла ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ СЕРВЕР УМЕЕТ ЭТО СООБЩАТЬ.
              Многие бесплатные хосты сообщают длину файла как ноль (хотя реально файл есть).
                А как узнать имя файла из URL, если ссылка непрямая???
                Через WinInet есс-но.
                  Цитата CrazyVirus @
                  Не фига в факе нету!

                  Уважаемый, та вааще в фак заглядывал? :angry:
                  фак
                    Что по поводу моего вопроса? Весь форум пеперыл по фразе WinInet, решения не нашел! И у десятка кодеров в аське спросил, никто не может ничего подсказать.
                      GET/POST ?
                        Цитата Mr. Gonarh @
                        GET/POST ?

                        Вот тут подобный вопрос задавали.
                        Цитата
                        Привет всем.
                        Столкнулся с проблемой. Как определить размер файла, примеров в сети уйма, а вот как определить имя файла ни одного даже намёка не нашел

                        Ну, с прямыми ссылками типа
                        http://host.net/download/file.zip
                        всё понятно, но если ссылка типа
                        http://host.net/go.php?act=download&file=76534
                        то как быть в этой ситуации?

                        Заранее биг фенькс.



                        Добавлено
                        как это сделать?

                        Добавлено
                        Пробовал через эту функцию:

                        ExpandedWrap disabled
                          function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):
                          string;
                          var
                           hSession, hFile: hInternet;
                           dwBuffer: Cardinal;
                           dwBufferLen, dwIndex: DWORD;
                          begin
                           Result := '';
                           hSession := InternetOpen('Explorer',
                                                    INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
                           if Assigned(hSession) then begin
                             hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
                                                      INTERNET_FLAG_RELOAD, 0);
                             dwIndex  := 0;
                             dwBufferLen := 1000;
                             if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
                               then Result :=PChar( @dwBuffer);
                             if Assigned(hFile) then InternetCloseHandle(hFile);
                             InternetCloseHandle(hsession);
                           
                           end;
                          end;


                        Но возвращает пустой результат.

                        Вызов:
                        GetUrlInfo(HTTP_QUERY_LOCATION, url);
                          дык говорю же формируешь запрос, читаеш заголовок и в поле Content-Location будет тебе то что нужно
                            Mr. Gonarh
                            Может тогда уже HEAD-запрос?
                              Цитата Mr. Gonarh @
                              дык говорю же формируешь запрос, читаеш заголовок и в поле Content-Location будет тебе то что нужно

                              Можно поподробнее?
                              Желательно пример отправки запроса. Только WinInet, не WinSock.

                              Добавлено
                              либо получение хеадера через HTTP_QUERY_RAW_HEADERS
                                Цитата Sec†orX @
                                Цитата Mr. Gonarh @
                                дык говорю же формируешь запрос, читаеш заголовок и в поле Content-Location будет тебе то что нужно

                                Можно поподробнее?
                                Желательно пример отправки запроса. Только WinInet, не WinSock.

                                к сожалению работал только с Winsock API
                                Сообщение отредактировано: Mr. Gonarh -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.0822 ]   [ 16 queries used ]   [ Generated: 26.08.26, 14:52 GMT ]