скачать файл с произвольного места

Тема в разделе "WASM.NETWORKS", создана пользователем cresta, 24 ноя 2006.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Есть url, нужно найти и контролировать периодически наличие в этом файле некоей фразы.
    Фраза находится примерно в 20 кБ от начала файла. Первое чтение читаю файл блоками по 256 байт начиная с начала. Когда нашёл фразу, запоминаю оффсет блока, в котором была найдена фраза. При следующем чтении с целью экономии траффика хочу прочесть не весь файл снова, а именно тот блок, в котором находилась фраза. Пытался воспользоваться InternetSetFilePointer, но она почему-то всё время возвращает -1 (ошибка). И файл опять зачитывается с самого начала.

    invoke InternetSetFilePointer, hUrl, curPointer, NULL, FILE_BEGIN, NULL
    Вроде здесь ничего криминального нет. В curPointer при повторном чтении сидит значение оффсета блока, найденное при первом чтении.
    Кто-нибудь сталкивался с подобным?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Качалки типа FlashGet, Download Master иногда пишут: "сервер не поддерживает докачку" - может дело в этом?, а вообще-то наверное можно и подглядеть как они эту проблему решают :)
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Смотрел Reget'ом, никаких подозрительных моментов в его логах не заметил.
     
  4. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Обязательно ли использование Internet-функций? Если нет, то в HTTP-протоколе получение байтов с определенного оффсета обеспечивается заголовком Range
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    может в этом дело?
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    cresta
    Попробуй вручную добавить в запрос в заголовки нужный параметр (RANGE или как его там).
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Дело не в достижении конца файла. Чтение прерывается на середине файла (нужный блок в середине).
    Возможно дело в том, что это .php файл. Скрипт на сервере генерит html код и отдаёт его по запросу. Вот только перед тем как отдать, этот html сохраняется в файл, или нет, сразу отдается из буфера? Если не сохраняется, то InternetSetFilePointer просто применить не к чему получается. Этот как версия.

    Sharp
    IceStudent

    Как я понял, это через HttpOpenRequest - HttpSendRequest? Есть какой-нибудь пример с этим Range? Как формировать заголовок? Я тут нашёл несколько примеров, но они все используют некие заголовки по умолчанию (NULL). А как самому сформировать заголовок?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    http://www.faqs.org/rfcs/rfc2616.html
    тут описание заголовка и его параметров
     
  9. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    То, как сервер реагирует на Range - это его, сервера, проблемы. Но он должен либо сказать 206 Partial Content (все хорошо), либо ругнуться.
    Думаю, через HttpAddRequestHeaders можно добавить заголовок. Примеры использования Range приведены в RFC 2616, самый простой: Range: bytes=500-999
     
  10. opennetworks

    opennetworks New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    436
    Сервер не поддерживает докачки - это если конечный файл там не лежит.

    Попробуй провести тест
    Пошли клиенту заголовки
    Content-type:Application/x-msdownload //для Windows
    или
    Content-type:Application/force-download //Для всех остальных

    Content-length:40254444521111254125
    И клиенту придёт такое, что ах!!!