perl - 使用 `atom` 运行 perl 代码会抛出未定义的子例程 &main::send_request
问题描述
我正在perl
为要求编写我的第一个脚本
- 使用不同的 URL 方案模式连续生成针对特定 Web uri 的 HTTP 请求
use HTTP::Request::Generator 'generate_requests'; use URI; use HTTP::Request::Common; use strict; # safety net use warnings; # safety ne use Test::LWP::UserAgent 'send_request'; use LWP::UserAgent 'send_request'; use Test::More; use URI; use HTTP::Request::Common; use LWP::UserAgent; my $g = generate_requests( method => 'POST', host => ['example.com','www.example.com'], pattern => 'https://example.com/{bar,foo,gallery}/[00..99].html', wrap => sub { my( $req ) = @_; # Fix up some values $req->{headers}->{'Content-Length'} = 666; }, ); while( my $r = $g->()) { send_request( $r ); };
我正在使用atom
编辑器,activeperl
在 Windows 10 上,运行上述代码时出现以下错误。
Undefined subroutine &main::send_request called at C:\Users\ADMINI~1\AppData\Local\Temp\atom_script_tempfiles\0ac821e0-0886-11eb-9588-291dbc37d883 line 57.
我已经安装了所有必要的模块和库,但我认为它无法引用该方法send_request
。请协助。
注意 出于隐私原因,我已经替换了变量中的实际值。
更新
我计划使用
pattern => 'https://example.{com,org,net}/page_[00..99].html',
https://metacpan.org/pod/HTTP::Request::Generator
中的以下模块。
解决方案
LWP::UserAgent 是一个面向对象的模块。它不导出函数。你想这样打电话send_request
:
my $ua = 'LWP::UserAgent'->new;
while ( my $r = $g->() ) {
$ua->send_request( $r );
}
也就是说,send_request
是一种未记录的内部方法。我认为它可能更适用于继承 LWP::UserAgent 的人。您可能需要该request
方法。
my $ua = 'LWP::UserAgent'->new;
while ( my $r = $g->() ) {
my $response = $ua->request( $r );
}
完整代码:
use strict;
use warnings;
use HTTP::Request::Generator 'generate_requests';
use LWP::UserAgent;
my $ua = 'LWP::UserAgent'->new;
my $gen = generate_requests(
method => 'POST',
host => [ 'example.com', 'www.example.com' ],
pattern => 'https://example.com/{bar,foo,gallery}/[00..99].html',
wrap => sub {
my ( $req ) = @_;
# Fix up some values
$req->{'headers'}{'Content-Length'} = 666;
},
);
while ( my $req = $gen->() ) {
my $response = $ua->request( $req );
# Do something with $response here?
}
推荐阅读
- asp.net-mvc - 使用带有表单参数的 pagedlist
- laravel - Laravel eloquent query always returns all columns even when passing id
- angular - Angular 6:给定 ElementRef,我可以得到 ViewContainerRef
- ruby-on-rails - Heroku 回滚并拉取旧版本
- java - Java - 在另一个类中使用包的主要方法
- javascript - 带有 React.js 的 url 上的按钮增量 ID 的 onClick
- mongodb - 对于给定的查询,我得到相同的结果,但 Mongo DB 中的一些键不同
- bash - 是否可以在服务器端更新挂钩上执行 git commit
- javascript - 检索跨度值
- javascript - d3.js 在点击位置创建对象 .enter() 时间线,然后过渡到日期