带有HTML::TreeBuilder的用户代理字符串

我正在使用HTML::TreeBuilder->new_from_url($url),但由于用户代理字符串不兼容,服务器阻止了我。如何更改用户代理字符串HTML::TreeBuildernew_from_url($url)直接使用,而没有通过传统方式获取 Web 内容的解决方法?

回答

没有办法在new_from_url(). 您必须LWP::UserAgent自己加载并设置用户代理字符串。然后您可以使用new_from_content().

但是,这是指向new_from_url代码的直接链接。您可以将其用作您自己new()方法的基础,以便您的程序流以相同的方式读取。

所以像:

sub HTML::TreeBuilder::my_new_from_url {
  # copy and augment new_from_url
  ...
}

my $tree = HTML::TreeBuilder->my_new_from_url($url, { useragent => "foo" });

现在尽管有所有这些正确的方法,但您可以LWP::UserAgent通过覆盖其_agent存储默认用户代理字符串的私有方法来玩一个肮脏的把戏。但请注意,您已使保修失效,所有损坏的模块行为都由您承担。

#the original 
sub _agent { "libwww-perl/$VERSION" }

在你的代码中定义:

use LWP::UserAgent ();
sub LWP::UserAgent::_agent { "Mozilla forever" }

或者,更狡猾:

use LWP::UserAgent ();

my $tree = do {
  local *LWP::UserAgent::_agent = sub { "Mozilla forever" };
  HTML::TreeBuilder->new_from_url($url);

};


以上是带有HTML::TreeBuilder的用户代理字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>