Ничерта не понял. В чем сложность составить запрос заново или поправить исходный?
И точно 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 кодам, а не ко всем запросам. То ли в модуле какой баг...