Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/27: Рейтинг темы: голосов - 27, средняя оценка - 4.89
Мы все БОЛЬШАЯ программа
 Аватар для bond95
52 / 52 / 5
Регистрация: 16.04.2009
Сообщений: 489

Наличие файла на сайте

15.04.2012, 19:08. Показов 5298. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим есть некоторый сайт, нужно с помощью IdHTTP проверить его на наличие некоторого файла, как это осуществить? Размер файла может быть от 1 МБайта до 20 или даже больше.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2012, 19:08
Ответы с готовыми решениями:

Проверить наличие файла на другом сайте
На созданом сайте создал поле для ввода адреса сайта, Вводим в это поле адрес - и скрипт должен выполняет следующие проверки: 1....

Каждую минуту проверять наличие слов на заданном сайте, и если слова найдены - сигнализировать
Добрый день, за ранее прошу прощения если не в том разделе создал! Есть сайт, на котором каждую минуту появляются определенные слова. ...

Перенос строк из таблицы одного файла в таблицу другого файла с проверкой на наличие в ней записей
Добрый день. Помогите пожалуйста написать код для переноса строк из таблицы одного файла в таблицу другого файла. Есть 2 файла:...

47
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
16.04.2012, 02:47
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
  IdHTTP1->HandleRedirects = true;
  try {
    IdHTTP1->Head("http://www.audiopoisk.com/files/scorpions/humanity-99832.mp3");
  }
  catch(...) {}
 
  int iErrorCode = IdHTTP1->ResponseCode;
  if (iErrorCode == 200) ShowMessage("Âñ¸ ÎÊ. Ôàéë íàéäåí");
  else if (iErrorCode == 404) ShowMessage("Ôàéë íå íàéäåí!");
  else ShowMessage("Îøèáêà: " + String(IdHTTP1->ResponseCode));
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 02:50
kzru_hunter,А у вас что выдает?
Миниатюры
Наличие файла на сайте  
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
16.04.2012, 02:52
ссылка неправильная была, подредактировал
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 02:57
Теперь код 404 Not Found

C++
1
IdHTTP1->HandleRedirects = true; // как я помню работает при 301 ошибке, а при 302 не всегда
Добавлено через 3 минуты
kzru_hunter, так что у вас выдает?
0
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
16.04.2012, 03:06
Цитата Сообщение от Avazart Посмотреть сообщение
качает ли он страницу?
Только что скачал файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString url = "http://www.audiopoisk.com/files/scorpions/humanity-99832.mp3";
  try
    {
      IdHTTP1->Head(url);
    }
  catch(EIdProtocolReplyError &E0)
    {
      if(E0.ReplyErrorCode == 302)
        {
          ShowMessage("Перенаправление #1");
          try
            {
              url = IdHTTP1->Response->Location;
              IdHTTP1->Head(url);
            }
          catch(EIdProtocolReplyError &E1)
            {
              if(E1.ReplyErrorCode == 302)
                {
                  ShowMessage("Перенаправление #2");
                  try
                    {
                      url = IdHTTP1->Response->Location;
                      IdHTTP1->Head(url);
                    }
                  catch(...)
                    {
                      ShowMessage("Файл недоступен");
                      return;
                    }
                }
            }
          catch(...)
            {
              ShowMessage("Файл недоступен");
              return;
            }
        }
    }
  catch(...)
    {
      ShowMessage("Файл недоступен");
      return;
    }
  if(IdHTTP1->ResponseCode == 200 || IdHTTP1->ResponseCode == 206)
    {
      ShowMessage("Файл доступен");
      TFileStream* fs = new TFileStream("C:\\test.mp3", fmCreate | fmOpenWrite);
      IdHTTP1->Get(url, fs);
      delete fs;
    }
  else
    ShowMessage("Файл недоступен");
Пробовал C++ Builder 2010 - завис, буду ковырять
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.04.2012, 03:13
Цитата Сообщение от kzru_hunter Посмотреть сообщение
IdHTTP1->HandleRedirects = true;
В случае, если необходимо отображать информацию о переходах, не желательно, так же зависит RedirectMaximum и насколько помню, от UserAgent - 301 и 302 могут отличаться. Для того, чтобы приложение не зависало, в отдельный поток или IdAntiFreeze, раз уж инди пользуемся.

Функция для загрузки, которую можно "разбавить ошибками" по вкусу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void __fastcall DownloadFileFromUrl(UnicodeString URL, TFileStream * &Out, TIdHTTP * &Source)
{
    try
    {
        Source->Get(URL, Out);
    }
    catch(EIdHTTPProtocolException &DownloadError)
    {
        switch(DownloadError.ErrorCode)
        {
            case 302:
                MessageBox(0,UnicodeString(L"Переход на адрес: " + Source->Response->Location).c_str(),
                    L"Информация о переходе",MB_OK|MB_TASKMODAL|MB_ICONINFORMATION);
                DownloadFileFromUrl(Source->Response->Location, Out, Source);
                return;
 
            default:
                MessageBox(0,UnicodeString(L"Ошибка # " + IntToStr(DownloadError.ErrorCode) +
                    L": " + DownloadError.Message).c_str(), L"Ошибка загрузки",
                    MB_OK|MB_TASKMODAL|MB_ICONERROR);
                return;
        }
    }
    MessageBox(0,L"Загрузка завершена!", L"Информация о загрузке",
        MB_OK|MB_TASKMODAL|MB_ICONINFORMATION);
}
Вызов:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TFileStream * OutFile = new TFileStream("f:/test.txt", fmCreate|fmOpenWrite);
    DownloadFileFromUrl("http://www.audiopoisk.com/files/scorpions/humanity-99832.mp3",
        OutFile, IdHTTP1);
    delete OutFile;
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 03:18
У меня также висит и посылает на 404

Добавлено через 2 минуты
DefineTrueFalse, да не в этом дело висит только с Head запросами, с Get -не висит сразу 404 после перенаправления

Добавлено через 2 минуты
Sergey-K , одно из двух либо разработчики запороли компонент, либо как обычно выпендрелись и что то поменяли в интерфейсе
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.04.2012, 03:26
Цитата Сообщение от Avazart Посмотреть сообщение
DefineTrueFalse, да не в этом дело висит только с Head запросами, с Get -не висит сразу 404 после перенаправления
Видимо дело в том, что после head, можно узнать размер файла... вам не кажется, что он его просто скачивает/доходит до конца документа? Насчет Get - в моем коде на RAD XE никаких 404 при корректной ссылке не возникает.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 03:34
RAD XE никаких 404 при корректной ссылке не возникает.
DefineTrueFalse, так у вас нормально находит эту ссылку?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.04.2012, 03:39
Попробуйте загрузить этот файл вручную желательно через браузер, а не менеджер. Посмотрите на время закачки, затем попробуйте приложением, используя мой код. Если время будет существенно отличаться, то приложение зависает, в ином случае просто идет загрузка.

Добавлено через 51 секунду
Цитата Сообщение от Avazart Посмотреть сообщение
DefineTrueFalse, так у вас нормально находит эту ссылку?
Как из приложения, так и из браузера.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 03:40
Браузеры(Opera,FireFox) нормально ее видят и качают!

Запрос/Ответ(Плагин FireFox)
http://www.audiopoisk.com/files/scorpions/humanity-99832.mp3

GET /files/scorpions/humanity-99832.mp3 HTTP/1.1
Host: www.audiopoisk.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sldkldtime=1334597369; sldkld=1; sldklayet=99832; volume=100; error_links2=0; hosts_link=; _ym_visorc=b

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.0.8
Date: Sun, 15 Apr 2012 22:26:46 GMT
Content-Type: text/html
Connection: keep-alive
Location: http://002.audiopoisk.com/get-... com%29.mp3
Vary: Accept-Encoding
Content-Length: 0
----------------------------------------------------------
http://002.audiopoisk.com/get-... com%29.mp3

GET /get-server/05091c0018001b02120903020518010614045200 525158025052560501580603000355010e5f0f01 59080206500a040151/13090944/MTMzNDQzODQxNzowZDZmNDcwZTAxMDA3YzYwMTkw NTAyMTkwZjFkMDAwNTFjMDEwNTRmNmE1ZDVlNDY1 ZTA0MDUwMjA1MGIxZTA4NzIwZjFlNDk0YjU3NWY1 OTUyNWY1ZTVlNWI2ZTU4NTI1NjVmNTk1MjE5NWY1 MzUxNTUxNzQzNGM6cHJvbmljaGtpbl9sZW9uaWRA bWFpbC5ydTo=/0/99832/MTkzLjE2MC4yMjQuNzk5ODMyb3M2aWYzZW85b3M2 aWYzZW85/Scorpions%20-%20Humanity%20%20%28audiopoisk.com%29.mp 3 HTTP/1.1
Host: 002.audiopoisk.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sldkldtime=1334597369; sldkld=1; sldklayet=99832; volume=100; error_links2=0; hosts_link=

HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Sun, 15 Apr 2012 21:58:04 GMT
Content-Type: application/download
Content-Length: 13090944
Last-Modified: Thu, 21 Oct 2010 12:56:57 GMT
Connection: keep-alive
Content-Disposition: attachment; filename="Scorpions - Humanity (audiopoisk.com).mp3"
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes
----------------------------------------------------------
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.04.2012, 03:48
Попробуйте изменить свойство UserAgent на:
Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0
Ибо у меня Head и Get занимают около полторы минуты (примерно столько времени качает браузер).
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 04:01
Без изменений
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
16.04.2012, 04:01
Вот еще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        String sURL = "http://www.audiopoisk.com/files/scorpions/humanity-99832.mp3";
        int iErrorCode = -1;
        while (true)
        {
                try { IdHTTP1->Head(sURL); } catch(...) {}
 
                iErrorCode = IdHTTP1->ResponseCode;
                if (iErrorCode != 301 && iErrorCode != 302) break;
 
                sURL = IdHTTP1->Response->Location;
        }
 
        if (iErrorCode == 200)
        {
                ShowMessage("Ôàéë íàéäåí: " + sURL);
                //IdHTTP1->Get(sURL);
        }
        else ShowMessage("Îøèáêà: " + String(iErrorCode));
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 04:10
Ошибка: 404
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
16.04.2012, 04:20
А ссылка точно та же в коде?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 04:26
Да, проверял

Добавлено через 52 секунды
Висит около минуты и только тогда перенаправление и сразу 404
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.04.2012, 04:29
1.
C++
1
2
3
AnsiString cnt_length;
cnt_length = "ContentLength: "+
              IntToStr(IdHTTP1->Response->ContentLength));
2. Скачивание файл из интернета
Предварительно размер файла можно узнать этой функцией
C++
1
2
3
4
5
6
7
BOOL WINAPI HttpQueryInfo(
  HINTERNET hRequest, 
  DWORD dwInfoLevel, 
  LPVOID lpBuffer, 
  LPDWORD lpdwBufferLength, 
  LPDWORD lpdwIndex
);
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.04.2012, 04:33
При перенаправлении ContentLength: -1
После ContentLength: 110
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.04.2012, 04:35
А должно вернуть
Content-Length: 13090944
, я так понимаю?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2012, 04:35
Помогаю со студенческими работами здесь

Как сделать проверку на наличие похожего имени файла и запрос нового имени файла?
При загрузке изображения присваивается имя foto.jpg. Вопрос, как сделать проверку на то что фото с таким именем существует и если он...

Сделать проверку на наличие похожего имени файла и запрос нового имени файла
Пользователь задает имя для создания файла. Вопрос, как сделать проверку на наличие похожего имени файла и запрос нового имени файла?

Проверка на наличие файла
Всем привет! Нужно проверить, существует ли файл (Например, C:/1.txt) и по результатам этой проверки будет выполняться условие. Есть ли...

Проверка файла на наличие
Добрый день, как проверить на наличие файла ? begin fName := ChangeFileExt(OpenDialog1.FileName, '.result'); // задает...

Проверка на наличие файла
Подскажите пожалуйста как сделать проверку на файл.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru