首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cro或HTTP::UserAgent时获取url get stucks的内容

使用Cro或HTTP::UserAgent时获取url get stucks的内容
EN

Stack Overflow用户
提问于 2018-12-16 21:45:31
回答 2查看 176关注 0票数 5

我想获取https://translate.google.cn的内容,然而,Cro::HTTP::ClientHTTP::UserAgent只是失败了,而WWW获得了内容,我不知道为什么。如果我将$url更改为https://perl6.org,所有三个模块都可以正常工作:

代码语言:javascript
复制
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)

我错过了什么吗?谢谢你给我的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-17 05:08:37

对我来说,HTTP::UserAgent可以工作,而Cro::HTTP::Client被卡住了。如果您希望进一步调试,两个模块都有一个debug选项:

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支持的(它对你不起作用)。下面是向您展示如何使用HTTP::UserAgentget方法

代码语言:javascript
复制
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
    }
}
票数 6
EN

Stack Overflow用户

发布于 2018-12-20 11:42:28

这可能是有问题的https网站上的http2造成的。实际上,您所描述的内容与我在https://github.com/croservices/cro-http/issues/45中提出的内容大致相同。

在修复之前的一个解决方法是尝试使用http/1.1发出请求

Cro::HTTP::Client.get('https://translate.google.cn', :http<1.1>);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53802756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档