如果我提出这样的请求:
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)
同时,这个声明也应该被删除
如果您真的想首先构建事务,然后
start
它,您需要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/