約 5G サイズの巨大な Web ページがあります。そして、ファイル全体をダウンロードせずに、Webページのコンテンツを直接(リモートで)読むことができれば幸いです。ファイル ハンドラーを使用しOpen
て HTTP コンテンツを開きました。しかし、与えられたエラーメッセージはNo such files or directory
. を使用しようとしましたが、コンテンツ全体LWP::Simple
を使用するとメモリ不足でした。このコンテンツをリモートで、1 行ずつ読むget
方法があるのだろうか。open
ご協力ありがとうございました。
質問する
329 次
2 に答える
0
LWP::UserAgent を使用してみてください。このrequest
メソッドを使用すると、CODE 参照を指定できます。これにより、入ってくるデータを処理できます。
#!/usr/bin/perl -w
use strict;
use warnings;
use LWP::UserAgent ();
use HTTP::Request ();
my $request = HTTP::Request->new(GET => 'http://www.example.com/');
my $ua = LWP::UserAgent->new();
$ua->request($request, sub {
my ($chunk, $res) = @_;
print $chunk;
return undef;
});
技術的には、関数は undef ではなくコンテンツを返す必要がありますが、undef を返すと機能するようです。ドキュメントによると:
「コンテンツ」関数は、呼び出されたときにコンテンツを返す必要があります。content 関数は、空の文字列を返してコンテンツがなくなったことを知らせるまで繰り返し呼び出されます。
大きなファイルでこれを試したことはありません。任意のサイズのチャンクとして入ってくるデータを処理するには、独自のコードを作成する必要があります。
于 2013-01-31T06:10:14.927 に答える