带有 HTML::TreeBuilder 的用户代理字符串
User agent string with HTML::TreeBuilder
我正在使用 HTML::TreeBuilder->new_from_url($url)
,但由于 user agent 字符串不兼容,服务器阻止了我。我如何才能将带有 HTML::TreeBuilder
的用户代理字符串更改为直接使用 new_from_url($url)
,而无需通过传统方式获取 Web 内容的变通方法?
无法在 new_from_url()
中进行设置。您必须自己加载 LWP::UserAgent
并设置用户代理字符串。然后就可以用new_from_content()
.
解析内容了
但是,这里是直接 link 到 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" });
现在尽管有所有这些正确的方法,但您可以通过覆盖其存储默认用户代理字符串的私有 _agent
方法来对 LWP::UserAgent
玩一个肮脏的把戏。但请注意,您已使保修失效,所有损坏的模块行为都由您承担。
#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->new_from_url($url)
,但由于 user agent 字符串不兼容,服务器阻止了我。我如何才能将带有 HTML::TreeBuilder
的用户代理字符串更改为直接使用 new_from_url($url)
,而无需通过传统方式获取 Web 内容的变通方法?
无法在 new_from_url()
中进行设置。您必须自己加载 LWP::UserAgent
并设置用户代理字符串。然后就可以用new_from_content()
.
但是,这里是直接 link 到 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" });
现在尽管有所有这些正确的方法,但您可以通过覆盖其存储默认用户代理字符串的私有 _agent
方法来对 LWP::UserAgent
玩一个肮脏的把戏。但请注意,您已使保修失效,所有损坏的模块行为都由您承担。
#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);
};