Вы должны убежать deeplinkForward
:
'deeplinkForward' => '/selfcare/restricted/prepareCoCo.do',
В противном случае WWW :: Mechanize считает, что вы хотите отправить буквальные знаки%, и старательно избегает их для вас.
Чтобы увидеть, что идет не так, попробуйте добавить этот код прямо перед строкой $mech->post
:
use HTTP::Request::Common 'POST';
print POST( $loginUrl, 'Content' => $loginData )->as_string;
print POST( $loginUrl, 'Content' => \%hash )->as_string;
Они должны быть одинаковыми, за исключением порядка полей.
Возможно, что сервер требует, чтобы поля были перечислены в указанном порядке (не должно, но ...). В этом случае вы можете использовать массив вместо хеша (хеши не сохраняют порядок). Просто замените %hash
на @fields
везде, где оно появляется.
print POST( $loginUrl, 'Content' => \@fields )->as_string;