perl - 为什么 LWP::UserAgent 成功而 Mojo::UserAgent 失败?

标签 perl http

如果我提出这样的请求:

my $mojo_ua = Mojo::UserAgent->new->max_redirects(5);

$mojo_ua->inactivity_timeout(60)->connect_timeout(60)->request_timeout(60);;
$mojo_ua->transactor->name('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');

my $headers = {
           'Accept' => 'application/json',
           'Accept-Language' => 'en-US,en;q=0.5',
           'Connection' => 'keep-alive',
           'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
           'x-csrf-token' => 'Fetch',
           'Accept-Encoding' => 'gzip, deflate, br',
           'DataServiceVersion' => '2.0',
           'MaxDataServiceVersion' => '2.0',
           'Referer' => 'https://blah.blas.com/someThing.someThing'
         };

my $url = Mojo::URL->new('https://blah.blah.com/irj/go/sap/FOO_BAR_BAZ/');

my $tx = $mojo_ua->get($url, $headers);
$tx = $mojo_ua->start($tx);
my $res = $tx->result;

请求超时,但如果我接受完全相同的请求,以相同的方式构建并执行此操作:

my $lwp_ua = LWP::UserAgent->new;

my $req = HTTP::Request->parse( $tx->req->to_string );
$req->uri("$url");
my $res = $lwp_ua->request($req);

它成功了。

在少数情况下,Mojo::UserAgent 会失败,而 LWP::UserAgent 会成功执行完全相同的事务,我开始感到好奇。

知道为什么吗?

最佳答案

您的来电

$mojo_ua->get($url, $headers)

已发送 HTTP 请求并收到服务器的响应、错误或超时。你不需要打电话

$mojo_ua->start($tx)

同样,应该删除该声明

如果你真的想先构建事务然后启动它,你需要

my $tx = $mojo_ua->build_tx(GET => $url, $headers);
$tx    = $mojo_ua->start($tx);

但我看不出有任何理由需要这样做

关于perl - 为什么 LWP::UserAgent 成功而 Mojo::UserAgent 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51829914/

相关文章:

perl - 日期范围问题

Qt multipart post问题

http - 我应该什么时候响应我网站上的 HTTP HEAD 请求

php - curl 发送 Content-length header 的问题

http - http授权 header 中的有效字符是什么

windows - 如何在 Perl 脚本中的 Windows 控制台上询问密码?

perl - 从脚本中,在远程服务器上运行脚本并获取其输出

mysql - 将 perl 数组返回给 MATLAB

perl - 为什么这个函数会占用大量内存?

javascript - Angular HTTP 拦截器没有命中错误函数