所以现在我正在使用 REST::Client,它在发出 GET 请求和获取 JSON 数据方面做得非常好。但是,有问题的 API 在发出 POST 请求时应传递 CSRF 令牌和会话 ID,然后如果通过 JSON 输入正确的凭据,则应进一步用于所有 POST 请求。
问题是,我看不到使用 REST::CLient 获取 cookie 的方法,所以我尝试了 LWP,我能够执行 JSON 请求,设置 cookie 设置,但仍然没有 cookie。
我尝试将它存储在一个文件中,尝试在一个变量中,仍然没有
$mech->cookie_jar($cookies);
那么我如何获得这些cookies呢?
PS我确定请求已执行,因为我看到了正确的输出并且我看到了第三方休息客户端的cookie。
编辑:
#!/usr/bin/perl
use REST::Client;
use JSON;
use Data::Dumper;
use MIME::Base64;
use 5.010;
use LWP::UserAgent;
use HTTP::Cookies;
my $first = $ARGV[0];
my $username = 'user@user.com';
my $password = 'password';
my $cookies = HTTP::Cookies->new();
my $ua = LWP::UserAgent->new( cookie_jar => $cookies );
my $headers = {Content-type => 'application/json'};
my $client = REST::Client->new( { useragent => $ua });
my $res = $client->POST('https://URL/action/?do=login',
'{"username": "user@user.com", "password":"password"}', {"Content-type" => 'application/json'});
chkerr($client->responseCode());
print $client->responseContent();
#print $client->responseHeaders();
#$cookies->extract_cookies($res);
print "\n" . $cookies->as_string;
sub chkerr {
my $res = shift;
if($res eq '200') {
print "Success\n";
} else { print "API Call failed: $res\n";
#exit(1);
}
}
代码真的很脏,因为我现在已经尝试了大约 50 种不同的东西。
输出如下:
Success
true -> this indicated that login is successful
Set-Cookie3: __cfduid=d3507306fc7b69798730649577c267a2b1369379851; path="/"; domain=.domain.com; path_spec; expires="2019-12-23 23:50:00Z"; version=0