所以现在我正在使用REST :: Client,它在制作GET请求和获取JSON数据方面表现非常出色。但是,在发出POST请求时,有问题的API应该传递CSRF令牌和会话ID,然后如果通过JSON输入正确的凭据,则应该进一步使用所有POST请求。
事实是,我看不到使用REST :: CLient获取cookie的方法,所以我尝试了LWP,我能够执行JSON请求,设置cookie设置但仍然没有cookie。
我尝试将其存储在一个文件中,尝试使用变量,但仍然没有
$mech->cookie_jar($cookies);
那么如何获取这些cookie?
P.S我确定请求已执行,因为我看到了正确的输出,而且我看到了第三方休息客户端的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
答案 0 :(得分:4)
从documentation开始,REST::Client
似乎在内部使用LWP::UserAgent
。默认情况下,LWP::UserAgent
会忽略Cookie,除非您设置其cookie_jar
属性。
所以你可以这样做(未经测试的代码):
my $ua = LWP::UserAgent->new( cookie_jar => {} );
my $rc = REST::Client->new( { useragent => $ua } );
答案 1 :(得分:0)
虽然innaM的答案会起作用,但这对我来说似乎更直接:
$client->getUseragent()->cookie_jar({}); # empty internal cookie jar
这假设您已在REST::Client
中拥有$client
个对象。