2012-08-03 35 views
4

我使用cfhttp獲得文件和解析的內容,像這樣:ColdFusion - 如何限制通過CFHTTP檢索的數據?

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

然而,有些文件是相當大的。我不需要得到整個事情 - 這可能需要很長時間。

有沒有什麼辦法可以在X之後停止運行cfhttp加載的字節數?或者設置一個限制,例如多少錢。

欣賞幫助。

回答

4

如果目標服務器支持的話,你可以使用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生成的,那麼它將由Appliation來響應請求中的Range:標頭。在我的情況下,我仍然得到整個文檔,因爲我的應用程序沒有看到Range標題。

我還應該提一下,在Java中你可能會做些什麼,因爲你已經對事件進行了更精細的控制,但是你必須自己寫一些東西或者使用其中一種方法HTTP客戶端庫在那裏。這取決於我認爲功能對你來說有多重要。如果文檔非常大,那麼您可能需要使用cfhttp的file屬性來避免將整個響應寫入內存,這可能會導致崩潰。

+0

謝謝你。 「源服務器正在生成文檔」是否意味着頁面是動態的?如在PHP中,CFML或其他?數據庫驅動?這隻能在完全靜態的html文件上工作嗎? – 2012-08-03 14:40:51