SagePay不久前推出了一个新的管理系统,但由于许多投诉使旧版本保持运行,所以我从不打扰更新我的脚本。 SagePay现在决定退役旧版本,所以我别无选择。
以下代码只是登录SagePay的脚本的第一部分:
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request;
use HTTP::Headers;
use HTTP::Request::Common qw(POST);
my $request = "";
my $content = "";
my $req = "";
my $cookie_jar = HTTP::Cookies->new();
my $ua = LWP::UserAgent->new();
$ua->cookie_jar($cookie_jar);
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
# LOGIN TO SAGEPAGY
$req = (POST 'https://portal.sagepay.com/myoldskool/loginpage.asp',
["vendorname" => "MYVENDORNAME",
"username" => "MYUSERNAME",
"password" => "MYPASSWORD",
"clickedButton" => "login"]);
$request = $ua->request($req);
$content = $request->content;
print $content;
此代码每次都能完美运行并打印SagePay仪表板的HTML,就像您登录时一样。 新的POST网址是https://portal.sagepay.com/mysagepay/j_spring_security_check,并且需要传递的参数几乎相同,所以从技术上讲,我只需要对代码进行以下更改即可:
$req = (POST 'https://portal.sagepay.com/mysagepay/j_spring_security_check',
["inp_vspvendorname" => "MYVENDORNAME",
"inp_username" => "MYUSERNAME",
"inp_password" => "MYPASSWORD",
"CSRFToken" => ""]);
当我在我的脚本$content
中更改此代码时,不打印任何内容,我不能为我的生活找出原因。我甚至尝试过使用HttpRequester Firefox插件并将相同的参数发送到同一个网址,并按预期返回仪表板HTML。
$request->status_line
已找到' 302'。
显然,我无法向您提供SagePay的登录详细信息,但即使只是将其返回HTML进行无效登录,至少我取得了进展。我已经被困在这几天了,我希望有人可以提供帮助。
答案 0 :(得分:2)
您收到了HTTP 302响应,这是一个重定向。默认情况下,LWP :: UserAgent不遵循POST请求的重定向。要更改此设置,请在发送请求之前更改用户代理的requests_redirectable
阵列:
push @{ $ua->requests_redirectable }, 'POST';
my $response = $ua->request($req);