使用 Cro 或 HTTP::UserAgent 时获取内容 url 卡住
Fetch the content of url get stucks when using Cro or HTTP::UserAgent
我想获取https://translate.google.cn的内容,但是Cro::HTTP::Client
和HTTP::UserAgent
就卡住了,WWW
获取内容,不知道为什么.
如果我将 $url
更改为 https://perl6.org,所有三个模块都可以正常工作:
my $url = "https://translate.google.cn";
use Cro::HTTP::Client;
my $resp = await Cro::HTTP::Client.new(
headers => [
User-agent => 'Cro'
]
).get($url);
say await $resp.body-text();
use HTTP::UserAgent;
my $ua = HTTP::UserAgent.new;
$ua.timeout = 30;
my $response = $ua.get($url);
if $response.is-success {
say $response.content;
} else {
die $response.status-line;
}
)
use WWW;
say get($url)
我错过了什么吗?谢谢你给我的建议。
对我来说 HTTP::UserAgent
有效,Cro::HTTP::Client
卡住了。如果您想进一步调试,两个模块都有一个调试选项:
perl6 -MHTTP::UserAgent -e 'my $ua = HTTP::UserAgent.new(:debug); say $ua.get("https://translate.google.cn").content'
CRO_TRACE=1 perl6 -MCro::HTTP::Client -e 'my $ua = Cro::HTTP::Client.new(); say $ua.get("https://translate.google.cn").result.body-text.result'
WWW
也适用于我。令人惊讶的是它对你有用,因为它由 HTTP::UserAgent
支持(这对你不起作用)。这是它的 get
方法,向您展示它如何使用 HTTP::UserAgent
:
sub get ($url, *%headers) is export(:DEFAULT, :extras) {
CATCH { .fail }
%headers<User-Agent> //= 'Rakudo WWW';
with HTTP::UserAgent.new.get: $url, |%headers {
.is-success or fail .&err;
.decoded-content
}
}
这可能归因于有问题的 https 站点上的 http2。事实上,您所描述的几乎就是我在 https://github.com/croservices/cro-http/issues/45.
中提出的内容
在修复出现之前的解决方法是尝试使用 http/1.1
发出请求
Cro::HTTP::Client.get('https://translate.google.cn', :http<1.1>);
我想获取https://translate.google.cn的内容,但是Cro::HTTP::Client
和HTTP::UserAgent
就卡住了,WWW
获取内容,不知道为什么.
如果我将 $url
更改为 https://perl6.org,所有三个模块都可以正常工作:
my $url = "https://translate.google.cn";
use Cro::HTTP::Client;
my $resp = await Cro::HTTP::Client.new(
headers => [
User-agent => 'Cro'
]
).get($url);
say await $resp.body-text();
use HTTP::UserAgent;
my $ua = HTTP::UserAgent.new;
$ua.timeout = 30;
my $response = $ua.get($url);
if $response.is-success {
say $response.content;
} else {
die $response.status-line;
}
)
use WWW;
say get($url)
我错过了什么吗?谢谢你给我的建议。
对我来说 HTTP::UserAgent
有效,Cro::HTTP::Client
卡住了。如果您想进一步调试,两个模块都有一个调试选项:
perl6 -MHTTP::UserAgent -e 'my $ua = HTTP::UserAgent.new(:debug); say $ua.get("https://translate.google.cn").content'
CRO_TRACE=1 perl6 -MCro::HTTP::Client -e 'my $ua = Cro::HTTP::Client.new(); say $ua.get("https://translate.google.cn").result.body-text.result'
WWW
也适用于我。令人惊讶的是它对你有用,因为它由 HTTP::UserAgent
支持(这对你不起作用)。这是它的 get
方法,向您展示它如何使用 HTTP::UserAgent
:
sub get ($url, *%headers) is export(:DEFAULT, :extras) {
CATCH { .fail }
%headers<User-Agent> //= 'Rakudo WWW';
with HTTP::UserAgent.new.get: $url, |%headers {
.is-success or fail .&err;
.decoded-content
}
}
这可能归因于有问题的 https 站点上的 http2。事实上,您所描述的几乎就是我在 https://github.com/croservices/cro-http/issues/45.
中提出的内容在修复出现之前的解决方法是尝试使用 http/1.1
发出请求
Cro::HTTP::Client.get('https://translate.google.cn', :http<1.1>);