ColdFusion — как ограничить данные, извлекаемые через CFHTTP?

Я использую cfhttp для получения документов и анализа содержимого следующим образом:

<cfhttp
        method="GET"
        url="#url.strURL#"
        resolveurl="true"
        useragent="#CGI.http_user_agent#"
        result="objGet"
        timeout="60"
        charset="utf-8"
    />

Однако некоторые документы имеют довольно большой размер. Мне не нужно получать все это целиком - это может занять много времени.

Есть ли способ остановить запуск cfhttp после загрузки X количества байтов? Или установить ограничение на то, сколько можно получить, например.

Цените помощь.


person Michael Giovanni Pumo    schedule 03.08.2012    source источник


Ответы (1)


Если целевой сервер поддерживает это, вы можете использовать заголовок http Range< /а>:

<cfhttp
        method="GET"
        url="#url.strURL#"
        resolveurl="true"
        useragent="#CGI.http_user_agent#"
        result="objGet"
        timeout="60"
        charset="utf-8"/>
   <cfhttpparam type="header" name="Range" value="bytes=0-499" />
 </cfhttp>

Apache и IIS поддерживают это, поэтому для статического контента вам, вероятно, повезет. Динамический контент будет сложнее...

... Я только что попробовал это с CFM, обслуживаемым через Apache, и похоже, что это не сработало. Я подозреваю, что если Apache/IIS обслуживает статический файл, то он может безопасно отправить обратно диапазон байтов из документа, который вы запрашиваете, потому что он может прочитать файл. Если запрос предназначен для чего-то, сгенерированного CF/ASP/JSP/чем-то еще, то приложение должно учитывать заголовок Range: в запросе. В моем случае я все еще получил весь документ, потому что мое приложение не просматривает заголовок Range.

Я также должен упомянуть, что в Java можно делать то, что вам нужно, поскольку у вас есть более тонкий контроль над тем, что происходит, но вам придется написать что-то самостоятельно или использовать одну из альтернативных HTTP-клиентских библиотек. там. Я полагаю, это зависит от того, насколько важна эта функция для вас. Если документы очень большие, вам может понадобиться использовать файловый атрибут cfhttp, чтобы избежать попадания всего ответа в память, что может привести к сбоям.

person barnyr    schedule 03.08.2012
comment
Спасибо за это. Под исходным сервером создается документ, вы имеете в виду, являются ли страницы динамическими? Как в PHP, CFML или что-то в этом роде? Управление базой данных? Будет ли это работать только с полностью статическими файлами html? - person Michael Giovanni Pumo; 03.08.2012