Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 02.01.2019, 11:57   #1
BLACK_RAIN
Участник клуба
 
Регистрация: 13.02.2012
Сообщений: 558
Репутация: 101
По умолчанию проверка на существование файла на сервере и доступ к нему

Здравствуйте.
Нужно программно скачать из интернета несколько файлов. Но не просто скачать, а при скачивании выполнить с ними определенные действия. Насколько мне известно, готовых программ для выполнения таких действий не существует. Действия очень простые, но весьма хитрые.
Чтобы ни у кого не возникали вопросы "почему?" и "зачем?", сразу опишу всё подробно:
Есть сайт. На этом сайте хранятся видео-файлы, которые так просто скачать нельзя. Однако, с помощью некоторых программ можно получить прямые ссылки на эти файлы. А так же можно увидеть, что каждый видео-файл хранится на тамошнем сервере разбитым на несколько маленьких файлов длительностью примерно по 10 секунд.
Сами ссылки выглядят примерно вот так:
Код:
https://server/video/id/0.ts
https://server/video/id/1.ts
https://server/video/id/2.ts
https://server/video/id/3.ts
https://server/video/id/4.ts
https://server/video/id/5.ts
https://server/video/id/6.ts
https://server/video/id/7.ts
https://server/video/id/8.ts
https://server/video/id/9.ts
https://server/video/id/10.ts
https://server/video/id/11.ts
https://server/video/id/12.ts
https://server/video/id/13.ts
и т.д.
Если скачать их любым менеджером закачки и запустить в видеоплеере, то все они нормально воспроизводятся. По 10 секунд каждый.
Выходит, что всё элементарно. Пишем программу, которая скачивает все файлы от 0 до N и объединяет их в один большой файл.
На основе примеров из интернета, набросал свой быдлокод:
Код:
var
 Stream: TFileStream;
 url : String;
 fn : string;
 i:integer;
begin
  fn := ExtractFilePath(Application.ExeName) + 'video.ts';
  if FileExists(fn) then
  DeleteFile(fn);
  Stream:= TFileStream.Create(fn, fmCreate or fmOpenWrite);
  for i := 0 to 34 do
  begin
    url := 'http://server/video/id/' + IntToStr(i) + '.ts';
    IdHTTP1.Get(url,Stream);
    Caption := IntToStr(i);
    Application.ProcessMessages;
  end;
  Stream.Free;
end;
И это работает (за исключением мелких нюансов). В результате получается цельный видео-файл, который нормально воспроизводится.
Однако, не всё так просто. При попытке скачать некоторые файлы (любым менеджером закачки), сервер выдаёт ошибку HTTP error 403 Forbidden.
Например, пытаюсь скачать файл https://server/video/id/40.ts и получаю ошибку HTTP error 403 Forbidden.
Но если при возникновении этой ошибки добавлять к имени файла "-muted", то есть ссылка будет выглядеть так: https://server/video/id/40-muted.ts. Тогда файл скачивается нормально, без ошибки 403.
Итак, собственно сам вопрос: как проверить, есть ли доступ к файлу по ссылке (и существует ли он вообще) и скачать другой файл вместо него если доступ к первому ограничен?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 21.01.2019, 11:08   #2
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 892
Репутация: 435
По умолчанию

Я думаю что такое можно реализовать с помощью WinInit, он сам определяет нужные ссылки, да и проверку в нем можно сделать на нужный файл, для теста вот здесь есть тестовая программка с исходником http://www.programmersforum.ru/showp...9&postcount=17

Последний раз редактировалось Aliens_wolfs; 21.01.2019 в 11:10.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 21.01.2019, 11:57   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,333
Репутация: 2611
По умолчанию

Что-то это очень смахивает на HLS. Если так, то может не стоит так извращаться, а использовать другой подход.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 22.01.2019, 04:21   #4
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 98
Репутация: 161
По умолчанию

В общем виде решение проблемы может выглядеть так:
Код:
  try
   IdHTTP1.Get(URL,stream);
  except
    on e: EIdHTTPProtocolException do
      case IdHTTP1.ResponseCode of
        403: begin
               showmessage('Тут ваш код при ошибке 403');
              end;
        404: begin      
              //.. и т.д.
             end;
      end;
   
  end;
А по сабжу: для загрузки Adobe HLS и Apple HLS(и подобных) существует множество решений, например ffmpeg, который легко съедает плэйлисты с чанками, youtube-dl и множество подобных. Даже vlc умеет делать захват и склеивать в большой .ts файл.
DIONISKA вне форума   Ответить с цитированием
Старый 03.02.2019, 11:42   #5
BLACK_RAIN
Участник клуба
 
Регистрация: 13.02.2012
Сообщений: 558
Репутация: 101
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Что-то это очень смахивает на HLS. Если так, то может не стоит так извращаться, а использовать другой подход.
Почему извращаться? В чем тут извращение? Какой другой подход-то? Перестаньте уже говорить загадками. Вы знаете способ лучше/проще?
Цитата:
Сообщение от DIONISKA Посмотреть сообщение
А по сабжу: для загрузки Adobe HLS и Apple HLS(и подобных) существует множество решений, например ffmpeg, который легко съедает плэйлисты с чанками, youtube-dl и множество подобных. Даже vlc умеет делать захват и склеивать в большой .ts файл.
Вы, видимо, не до конца дочитали первый пост. Для кого я так долго и тщательно всё разжёвывал?
Там ясно сказано, что если, например, к файлу 150.ts нет доступа, то заменить его на 150-muted.ts.
Какая из вышеперечисленных программ так умеет?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 03.02.2019, 13:00   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,333
Репутация: 2611
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Почему извращаться? В чем тут извращение? Какой другой подход-то? Перестаньте уже говорить загадками. Вы знаете способ лучше/проще?
Это вы тут в загадки с самого начала играете. Сказали бы надо: получить поток HLS, а не: есть файл, нужно проверять доступ...

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Какая из вышеперечисленных программ так умеет?
Любая, какая заявляет о поддержке соответствующего стандрта. Т.к. клиенту отсылается "плейлист" и ему не надо проверяет есть ли файл, придумывать какой вместо этого запрашивать толи 150-muted, толи 150-ррр, толи 150-ццц...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 03.02.2019, 13:56   #7
BLACK_RAIN
Участник клуба
 
Регистрация: 13.02.2012
Сообщений: 558
Репутация: 101
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это вы тут в загадки с самого начала играете. Сказали бы надо: получить поток HLS, а не: есть файл, нужно проверять доступ...


Любая, какая заявляет о поддержке соответствующего стандрта. Т.к. клиенту отсылается "плейлист" и ему не надо проверяет есть ли файл, придумывать какой вместо этого запрашивать толи 150-muted, толи 150-ррр, толи 150-ццц...
Ну какой же ты тугой, это пипец! Я всё разжевал для тебя. Тебе осталось только проглотить.
В плейлисте написано 150.ts, но этот файл не доступен. Вместо него доступен файл 150-muted.ts.
Как, не проверяя доступ, узнать какой файл нужно качать?
BLACK_RAIN вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка существование файла на ftp Wh1teP Общие вопросы Delphi 5 22.04.2013 14:48
проверка на существование файла god5 Общие вопросы Delphi 4 02.03.2013 16:31
Проверка на существование файла на удалённом http сервере NewBoy Общие вопросы C/C++ 0 03.08.2012 10:21
Проверить существование файла на сервере Wicort JavaScript, Ajax 8 04.05.2012 23:16
Проверка существование Email адреса на сервере Бутаков_Сергей Работа с сетью в Delphi 7 29.12.2010 02:55


00:42.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru