我应该如何使用 Mojo::UserAgent 处理 HTML META 标签?
How should I process HTML META tags with Mojo::UserAgent?
我不得不使用一些配置错误的 Web 服务器,所以我开始处理 HTML 元标记以将信息反馈回 Web 用户代理对象。我在 Mojolicious 中尝试了多种执行此操作的方法,并决定在响应中寻找 "finish" 事件。我的目标是让其余代码几乎看不到这一点,因此进程甚至不知道发生了什么。
不过,由于我无法完全理解的原因,这并不适合我。除了 process_meta_options
中的特定代码之外,是否有更有趣的方法来执行此操作?例如,Mojo::UserAgent get() with userdefined callback 使用 read
事件,但我倾向于认为这可能会干扰事情。或者我可能只是想多了。
use v5.20;
use feature qw(signatures);
no warnings qw(experimental::signatures);
use Data::Dumper;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $tx = $ua->build_tx( GET => 'http://blogs.perl.org' );
$tx->res->on(
finish => \&process_meta_options
);
$tx = $ua->start( $tx );
say "At end, charset is ", $tx->res->content->charset;
sub process_meta_options ( $res ) {
$res
->dom
->find( 'head meta[charset]' ) # HTML 5
->map( sub {
my $content_type = $res->headers->header( 'Content-type' );
return unless my $meta_charset = $_->{charset};
$content_type =~ s/;.*//;
$res->headers->header( 'Content-type', "$content_type; charset=$_->{charset}" );
} );
}
我想答案就是我想出来的。我还没有找到我更喜欢的东西。
use v5.20;
use feature qw(signatures);
no warnings qw(experimental::signatures);
use Data::Dumper;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $tx = $ua->build_tx( GET => 'http://blogs.perl.org' );
$tx->res->on(
finish => \&process_meta_options
);
$tx = $ua->start( $tx );
say "At end, charset is ", $tx->res->content->charset;
sub process_meta_options ( $res ) {
$res
->dom
->find( 'head meta[charset]' ) # HTML 5
->map( sub {
my $content_type = $res->headers->header( 'Content-type' );
return unless my $meta_charset = $_->{charset};
$content_type =~ s/;.*//;
$res->headers->header( 'Content-type', "$content_type; charset=$_->{charset}" );
} );
}
我不得不使用一些配置错误的 Web 服务器,所以我开始处理 HTML 元标记以将信息反馈回 Web 用户代理对象。我在 Mojolicious 中尝试了多种执行此操作的方法,并决定在响应中寻找 "finish" 事件。我的目标是让其余代码几乎看不到这一点,因此进程甚至不知道发生了什么。
不过,由于我无法完全理解的原因,这并不适合我。除了 process_meta_options
中的特定代码之外,是否有更有趣的方法来执行此操作?例如,Mojo::UserAgent get() with userdefined callback 使用 read
事件,但我倾向于认为这可能会干扰事情。或者我可能只是想多了。
use v5.20;
use feature qw(signatures);
no warnings qw(experimental::signatures);
use Data::Dumper;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $tx = $ua->build_tx( GET => 'http://blogs.perl.org' );
$tx->res->on(
finish => \&process_meta_options
);
$tx = $ua->start( $tx );
say "At end, charset is ", $tx->res->content->charset;
sub process_meta_options ( $res ) {
$res
->dom
->find( 'head meta[charset]' ) # HTML 5
->map( sub {
my $content_type = $res->headers->header( 'Content-type' );
return unless my $meta_charset = $_->{charset};
$content_type =~ s/;.*//;
$res->headers->header( 'Content-type', "$content_type; charset=$_->{charset}" );
} );
}
我想答案就是我想出来的。我还没有找到我更喜欢的东西。
use v5.20;
use feature qw(signatures);
no warnings qw(experimental::signatures);
use Data::Dumper;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $tx = $ua->build_tx( GET => 'http://blogs.perl.org' );
$tx->res->on(
finish => \&process_meta_options
);
$tx = $ua->start( $tx );
say "At end, charset is ", $tx->res->content->charset;
sub process_meta_options ( $res ) {
$res
->dom
->find( 'head meta[charset]' ) # HTML 5
->map( sub {
my $content_type = $res->headers->header( 'Content-type' );
return unless my $meta_charset = $_->{charset};
$content_type =~ s/;.*//;
$res->headers->header( 'Content-type', "$content_type; charset=$_->{charset}" );
} );
}