2

だから今、私は 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
4

2 に答える 2

4

ドキュメントから、内部REST::Clientで使用しているようです。LWP::UserAgentデフォルトでは、属性LWP::UserAgentを設定しない限り Cookie は無視されます。cookie_jar

したがって、次のようなことができます (テストされていないコード):

my $ua = LWP::UserAgent->new( cookie_jar => {} );
my $rc = REST::Client->new( { useragent => $ua } );
于 2013-05-23T13:04:31.103 に答える
0

innaMの答えは機能しますが、これは私にはもっと簡単に思えます:

$client->getUseragent()->cookie_jar({}); # empty internal cookie jar

REST::Clientこれは、 に既にオブジェクトがあることを前提としています$client

于 2016-07-14T15:10:07.000 に答える