【问题标题】:ColdFusion - How to limit data retrieved via CFHTTP?ColdFusion - 如何限制通过 CFHTTP 检索的数据?
【发布时间】:2012-08-03 23:58:02
【问题描述】:

我正在使用cfhttp 来获取文档并解析内容,如下所示:

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

但是,有些文档相当大。我不需要得到整个东西 - 这可能需要很长时间。

有什么方法可以在X 加载字节数后停止运行cfhttp?或者例如限制获得多少。

感谢您的帮助。

【问题讨论】:

    标签: coldfusion coldfusion-9 railo cfhttp


    【解决方案1】:

    如果目标服务器支持,可以使用Range http header

    <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 支持这一点,因此对于静态内容,您可能会很幸运。动态内容会更棘手...

    ...我刚刚尝试过通过 Apache 提供 CFM 服务,但看起来这不起作用。我怀疑如果 Apache/IIS 正在提供静态文件,那么它可以安全地从您请求的文档中发送回一系列字节,因为它可以读取该文件。如果请求是针对由 CF/ASP/JSP/whatever 生成的内容,则由应用程序来遵守请求中的 Range: 标头。就我而言,我仍然得到了整个文档,因为我的应用程序没有查看 Range 标题。

    我还应该提到,在 Java 中可以做你想做的事情,因为你可以更好地控制正在发生的事情,但你必须自己编写一些东西或使用替代 HTTP 之一客户端库在那里。我想这取决于该功能对您的重要性。如果文档非常大,那么您可能需要使用 cfhttp 的 file 属性来避免将整个响应放入内存,这可能会导致崩溃。

    【讨论】:

    • 谢谢。 “源服务器正在生成文档”是指页面是否是动态的?就像 PHP、CFML 或其他什么?数据库驱动?这仅适用于完全静态的 html 文件吗?
    猜你喜欢
    • 2017-02-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多