4

私はcfhttpドキュメントを取得し、次のようにコンテンツを解析するために使用しています:

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

ただし、一部のドキュメントはかなり大きいです。すべてを取得する必要はありません。これには長い時間がかかる可能性があります。

バイト数がロードされcfhttpた後に実行を停止する方法はありますか?Xまたは、たとえば取得する量に制限を設定します。

ヘルプに感謝します。

4

1 に答える 1

4

ターゲット サーバーがサポートしている場合は、Range http ヘッダーを使用できます。

<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 などによって生成される何かに対するものである場合、要求の Range: ヘッダーを尊重するのはアプリケーション次第です。私の場合、アプリケーションは Range ヘッダーを見ていないため、ドキュメント全体をまだ取得しています。

また、何が起こっているかをより細かく制御できるため、Javaでやりたいことを実行できることにも言及する必要がありますが、自分で何かを作成するか、別のHTTPクライアントライブラリのいずれかを使用する必要がありますそこの。それは、その機能があなたにとってどれほど重要であるかによって異なります。ドキュメントが非常に大きい場合は、cfhttp の file 属性を使用して、クラッシュの原因となる応答全体がメモリに取り込まれないようにする必要があります。

于 2012-08-03T14:04:25.747 に答える