使用 LWP::UserAgent 发送 HTTP 请求
LWP::UserAgent 是 Perl 中最常用的库之一,用于发送和接收 HTTP 请求。它提供了丰富的功能来处理各种类型的 HTTP 请求,包括 GET、POST 等。
安装 LWP::UserAgent
在使用 LWP::UserAgent 之前,你需要确保已经安装了这个模块。你可以通过 CPAN 或者其他包管理工具来安装:
cpan install LWP::UserAgent
或者使用 cpanm:
cpanm LWP::UserAgent
创建 UserAgent 对象
首先,我们需要创建一个 LWP::UserAgent 的对象,这个对象将用来发送 HTTP 请求。
use LWP::UserAgent; my $ua = LWP::UserAgent->new;
发送 GET 请求
GET 请求是最常见的 HTTP 请求类型之一,用于从服务器获取资源。我们可以通过 get 方法发送 GET 请求,并返回一个 HTTP::Response 对象。
my $response = $ua->get('http://example.com/');
if ($response->is_success) {
print $response->decoded_content; # 输出响应内容
} else {
die $response->status_line; # 输出错误信息
}发送 POST 请求
POST 请求通常用于向服务器提交数据,比如表单提交。我们可以使用 post 方法来发送 POST 请求,并且可以传递请求体。
// www.javascriptcn.com code example
my $response = $ua->post(
'http://example.com/form',
Content_Type => 'form-data',
Content => [
username => 'test_user',
password => 'password123',
]
);
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}设置请求头
HTTP 请求头允许我们设置额外的信息,如用户代理、接受的 MIME 类型等。这些信息可以通过 header 方法来设置。
// www.javascriptcn.com code example
my $response = $ua->get(
'http://example.com/',
'User-Agent' => 'MyCustomUserAgent/1.0',
'Accept' => 'application/json',
);
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}处理重定向
默认情况下,LWP::UserAgent 会自动跟随重定向。如果你不想自动跟随重定向,可以关闭自动重定向:
// www.javascriptcn.com code example
$ua->requests_redirectable( [] ); # 禁止自动重定向
my $response = $ua->get('http://example.com/redirect');
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}超时控制
为了防止请求无限期地挂起,我们可以设置超时时间:
// www.javascriptcn.com code example
$ua->timeout(10); # 设置超时时间为 10 秒
my $response = $ua->get('http://example.com/');
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}使用 Mojo::UserAgent 发送 HTTP 请求
Mojo::UserAgent 是 Mojolicious 框架的一部分,它提供了一个更现代的 HTTP 客户端库。它具有异步特性,并且支持 WebSocket。
安装 Mojo::UserAgent
你可以通过 CPAN 或者其他包管理工具来安装 Mojolicious:
cpan install Mojolicious
或者使用 cpanm:
cpanm Mojolicious
创建 UserAgent 对象
使用 Mojo::UserAgent 非常简单,只需要创建一个对象即可:
use Mojo::UserAgent; my $ua = Mojo::UserAgent->new;
发送 GET 请求
my $tx = $ua->get('http://example.com/');
if (my $res = $tx->success) {
print $res->body; # 输出响应内容
} else {
my ($err, $code) = $tx->error;
die "Error: $err, code: $code";
}发送 POST 请求
// www.javascriptcn.com code example
my $tx = $ua->post(
'http://example.com/form',
form => {
username => 'test_user',
password => 'password123',
}
);
if (my $res = $tx->success) {
print $res->body;
} else {
my ($err, $code) = $tx->error;
die "Error: $err, code: $code";
}异步请求
Mojo::UserAgent 支持异步请求,这使得它可以与非阻塞 I/O 操作结合使用,非常适合处理并发请求:
// www.javascriptcn.com code example
use Mojo::IOLoop;
my $delay = Mojo::IOLoop->delay(
sub {
my ($delay) = @_;
my $tx = $ua->get(@{$delay->begin});
},
sub {
my ($delay, $tx) = @_;
if (my $res = $tx->success) {
print $res->body;
} else {
my ($err, $code) = $tx->error;
die "Error: $err, code: $code";
}
}
);
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;总结
以上介绍了如何使用 LWP::UserAgent 和 Mojo::UserAgent 发送 HTTP 请求。这两个库都提供了强大的功能来处理 HTTP 请求,选择哪一个取决于你的具体需求和项目架构。希望这些示例能够帮助你更好地理解和使用 Perl 中的 HTTP 请求。