代码之家  ›  专栏  ›  技术社区  ›  chenyf

使用cro或http::useragent时获取url get stucks的内容

  •  5
  • chenyf  · 技术社区  · 5 年前

    我想知道 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)
    

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

    2 回复  |  直到 5 年前
        1
  •  6
  •   ugexe    5 年前

    为了我 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::UsAgent (这对你不起作用)。这是它的 get 向您展示它如何使用的方法 http::UsAgent 以下内容:

    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
        }
    }
    
        2
  •  1
  •   shalomb    5 年前

    这可能取决于有问题的https站点上的http2。事实上,你所描述的几乎就是我在 https://github.com/croservices/cro-http/issues/45 .

    解决方法是尝试使用HTTP/1.1进行请求,直到修复完成。

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