だから今、私は REST::Client を使っています。これは、GET リクエストの作成と JSON データのフェッチに関しては完璧にうまく機能します。ただし、問題の API は、POST リクエストを発行するときに CSRF トークンとセッション ID を渡す必要があり、JSON を介して適切な資格情報を入力する場合は、すべての POST リクエストに対してさらに使用する必要があります。
つまり、REST::CLient を使用して Cookie を取得する方法が見つからないので、LWP を試してみました。
ファイルに保存しようとしましたが、変数で試しましたが、まだ何もありません
$mech->cookie_jar($cookies);
では、これらの Cookie を取得するにはどうすればよいでしょうか。
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