スポンサーリンク

Perlモジュールlibwwwの LWP:::UserAgentでコンテンツを取得するプログラムが Out of memory というエラーメッセージを残して、終了してしまいました。
どうやら、 request()でコンテンツをまとめて受信していたのがまずかったようです。
my $response = $ua->request( HTTP::Request->(GET=>$url) );

このOut of memory問題を解決するために、データを受信次第、処理するプログラムに変更しました。

request()の第2引数に処理を指定することで、データを受信したときに処理することができるようになります。
my $response = $ua->request( HTTP::Request->(GET=>$url),
		sub {
		my ($chunk, $response) = @_;
		# $chunk を処理する。
		# print $chunk;
});

コンテンツが圧縮されているときは、パイプで zcat コマンドに渡しています。
#!/usr/local/bin/perl -w
use strict;
my $url = 'http://honyaku.yahoo.co.jp/';
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;

my $response;
my $first = 1;
my $zopen = 0;
my $out = *STDOUT;
$ua->request(HTTP::Request->new(GET => $url),
	sub{
		my ($chunk, $response) = @_;
		if ($first) {
			$first = 0;
			if ($response->code != 200) {
				# error
				die "error";
			}
			if ( $response->content_encoding eq "gzip" ) {
				open (Z, "| /usr/bin/zcat")
				or die "can not open zcat: $!";
				$zopen = 1;
				$out = *Z;
			}
		}
		print $out $chunk;
	});
close(Z) if ($zopen);

Perl

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー