Ничерта не понял. В чем сложность составить запрос заново или поправить исходный?
И точно 503, а не 403? На 503 намекает, что серверу дурно стало.
Вот кодом покажу (частью, чтобы все не копипастить). Там и правда 403, торопился и опечатался. Какая логика. Делаем запрос. Если 200, то все нормально. Если же 403, то добавляем заголовок с токеном и делаем снова его (за счет модуля Determined).
use LWP::UserAgent;
use LWP::Protocol::https;
use LWP::UserAgent::Determined;
use Data::Dumper;
require HTTP::Request;
use LWP::ConnCache;
use LWP::Simple;
my $ua = LWP::UserAgent::Determined->new(ssl_opts => { verify_hostname => 0 });
$ua->add_handler(response_header => sub {
my ($res, $ua) = @_;
$ua->default_header('Token' => 'тут токен'); # вот так робит, но не совсем комильфо
$res->request->header('Token' => 'тут токен'); # а вот так - нет, хотя обработчик вроде как раз с заголовками работает, но пробовал и др. Почему-то не добавляет заголовок...
return;
} , m_code => [403]);
my $res=$ua->get('url');
Также пробовал вариант в самом модуле
LWP::UserAgent::Determined
вызвать обработчик. Есть там обработчик
before_determined_callback
, и даже получилось так
$ua->before_determined_callback( sub {
$_[4][0]->headers->header('Token' => 'Value');
});
, хотя, этот же код почему-то до этого пару раз не срабатывал. НО, тут один минус, который все портит, не сообразил, как сделать так, чтобы заголовок добавлялся только к 403 кодам, а не ко всем запросам. То ли в модуле какой баг...