Я пытаюсь отправить несколько HTTP-запросов на получение, используя Perl.Мне нужно отправить запрос с помощью прокси-сервера sock.
Если я использую следующий код, я могу отправить запрос с прокси-сервером sock
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(
agent => q{Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.2.0; .NET CLR 1.1.4322)},
);
$ua->proxy([qw/ http https /] => 'socks://localhost:9050'); # Tor proxy
#$ua->cookie_jar({});
$a = 10;
while ( $a < 20 ) {
my $rsp = $ua->get('http://example.com/type?parameter=1¶meter=2');
print $rsp->content;
$a = $a + 1;
}
Он успешно работает, но мне нужно использовать AnyEvent
для отправки нескольких запросов GET параллельно
#!/usr/bin/perl
use strict;
use AnyEvent;
use AnyEvent::HTTP;
use Time::HiRes qw(time);
use LWP::Protocol::socks;
use AnyEvent::Socket;
my $cv = AnyEvent->condvar( cb => sub {
warn "done";
});
my $urls = [
"http://url-1-withallparameters",
"http://url-2-withallparameters",
"http://url-3-withallparameters",
];
my $start = time;
my $result;
$cv->begin(sub { shift->send($result) });
for my $url ( @$urls ) {
$cv->begin;
my $now = time;
my $request;
$request = http_request(
GET => $url,
timeout => 2, # seconds
sub {
my ($body, $hdr) = @_;
if ($hdr->{Status} =~ /^2/) {
push (@$result,
join("\t",
($url,
" has length ",
$hdr->{'content-length'},
" and loaded in ",
time - $now,
"ms"))
);
}
else {
push (@$result,
join("",
"Error for ",
$url,
": (",
$hdr->{Status},
") ",
$hdr->{Reason})
);
}
undef $request;
$cv->end;
}
);
}
$cv->end;
warn "End of loop\n";
my $foo = $cv->recv;
print join("\n", @$foo), "\n" if defined $foo;
print "Total elapsed time: ", time-$start, "ms\n";
Это работает нормально, но я не могу отправлять эти запросы через прокси-сервер sock.
Даже в терминале, если я экспортирую прокситакие команды, как curl
и wget
, они прекрасно работают с прокси-сервером sock, но когда я использую команду Perl для выполнения этого скрипта в качестве прокси-сервера sock, она не работает.
Я могу интегрировать ее с LWP::UserAgent
но он не работает с AnyEvent
.
Я использовал
proxy => [ $host, $port ],
ниже
GET => $url,
, но он работает только для HTTP и HTTPS-прокси, но не дляносок прокси.Этот url работает для прокси HTTP / HTTPS, но не для прокси-сервера sock.