Извлекать содержимое URL, которое застревает при использовании Cro или HTTP :: UserAgent - PullRequest
0 голосов
/ 16 декабря 2018

Я хочу получить содержимое 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 ]

0 голосов
/ 20 декабря 2018

Это может быть до http2 на проблемных сайтах https.Фактически, то, что вы описываете, в значительной степени соответствует тому, что я поднял в https://github.com/croservices/cro-http/issues/45.

Обходной путь до исправления - попытаться сделать запросы, используя http / 1.1

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

0 голосов
/ 17 декабря 2018

У меня 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
    }
}
...