im被以下内容卡住:
我试图在一个分叉进程中向父进程发送一个"$ua->get($url)",如下所示:
use LWP::UserAgent;
use IO::Handle;
pipe my $ua_reader, my $ua_writer;
my $url = "http://some-sample-html-file";
my $ua = LWP::UserAgent->new;
$ua->timeout(1);
my $ua_process = fork();
if( $ua_process == 0 ) {
close $ua_reader;
print $ua_writer $ua->get($url);
exit 0;
}
do {
$ua_process = waitpid(-1, 0);
} while ($ua_process >= 0);
close $ua_writer;
my $response = $ua_reader->getline;
close $ua_reader;
print $response->decoded_content;
我得到这个错误:
Can't locate object method "decoded_content" via package "HTTP::Response=HASH(0x19045f0)" (perhaps you forgot to load "HTTP::Response=HASH(0x19045f0)"?) at ./uafork.pl line 26.
$ua对象确实有一个"decoded_content"方法,但它在通过管道后不可调用(其他方法,如"is_success"也不起作用…)
这里有什么可能的解决方案?如有任何帮助,我们将不胜感激。
首先,不能将HTTP::Response直接写入流中。该错误意味着写为"HTTP::Response…"的字符串没有方法decoded_content
。您必须写入从decoded_content获得的字符串,并作为字符串读取。
use LWP::UserAgent;
use IO::Handle;
use Encode;
pipe my $ua_reader, my $ua_writer;
my $url = "http://some-sample-html-file";
my $ua = LWP::UserAgent->new;
$ua->timeout(1);
my $ua_process = fork();
if( $ua_process == 0 ) {
close $ua_reader;
print $ua_writer encode_utf8 $ua->get($url)->decoded_content;
exit 0;
}
do {
$ua_process = waitpid(-1, 1);
} while ($ua_process != 0);
close $ua_writer;
my $response = $ua_reader->getline;
close $ua_reader;
print $response;