оборвать curl

Тема в разделе "PHP", создана пользователем ivashka, 23 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Пишу скрипт для продления ссылок на зиппишаре.
    Получаю прямую ссылку, могу скачать файл.
    Но как при помощи curl оборвать коннект (что бы файл не скачивался)?
    Меня устроит и 2-5 сек скачивания файла, или же получить допустим 5 Кб этого файла?

    Заранее благодарен.
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    bool curl_setopt ( resource ch, string option, mixed value )

    CURLOPT_TIMEOUT: Задает масимальное время выполнения операции в секундах.


    или сокеты и чтение блоками
     
    ivashka нравится это.
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    это таймаут на разрыв связи. а ТС хочет на живом соединении сделать обрыв. на сокетах конечно было бы правильнее, но долго писать. по моему в этом случае проще наваять десктопное приложение на том же дельфи с участием инди.
     
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    А curl_close() чем не устраивает? Вызывай после получения первого куска файла (5Кб, или сколько там буфер сделаешь) - и все. Оно само максимум еще столько же скачает (пока буфер не заполнится) - и отвалится. А на том конце будет еще таймаут висеть.

    Правильней конечно было бы туда Connection:Close послать, но то уже действительно только сокетами, похоже.
     
  5. djamil

    djamil Постоялец

    Регистр.:
    25 авг 2008
    Сообщения:
    74
    Симпатии:
    16
    Установи таймаут несколько секунд, не успеет скачаться.
    У меня была проблема, файл не докачивался доконца, сразу не додумался увеличить время таймаута, просто файл не успевал докачаться.
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    Читай первый пост

    Но как при помощи curl оборвать коннект (что бы файл не скачивался)?

    и описание HTTP протокола
     
  7. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    curl_close()
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    ты с курлом работал?

    он не позволяет читать данные поблочно
    т.е. ты просто не сможешь определить момент когда скачал 5 кБ

    curl_close() закроет соединение, НО после того как получит ответ ( т.е. данные целиком )
     
  9. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Сорри, действительно не понял.

    CURLOPT_RANGE позволяет задать HTTP Range скачиваемого файла и после этого отвалиться по curl_close(). Работать будет только если сервак понимает HTTP Range (т.е. грубо говоря если сервак поддерживает докачку).

    Второй способ - повеситься на CURLOPT_WRITEFUNCTION и обрывать соединение в нем.

    Третий способ - установить CURLCLOSEPOLICY_OLDEST и банально "вытеснить" скачиваемый файл пустышками.

    Ну и в теории еще можно попробовать установить CURLOPT_BUFFERSIZE и дождаться CURLE_OUT_OF_MEMORY. Но не уверен, что это будет работать.
     
  10. bondaf

    bondaf Постоялец

    Регистр.:
    16 мар 2010
    Сообщения:
    85
    Симпатии:
    20
    Мм.. А если есть прямая ссылка на файл, почему бы не воспользоваться fread и выставить нужный объем?
     
Статус темы:
Закрыта.