Christian Kruse: Perl & LWP::UserAgent & Cookie setzen

Beitrag lesen

Hallo Silvio,

laut Doku zu LWP::UserAgent kann ich mit LWP::UserAgent bei einem Request auch einen Cookie mit übergeben.

Naja, jain. Der Cookie Jar ist ein Container, in dem LWP::UserAgent Cookies speichert, die bei einem Request geschickt werden; beim nächsten Request würden sie dann wieder mitgeschickt.

Ich finde folgende Zeilen:

1.)

my $jar = $ua->cookie_jar;
$ua->cookie_jar( $cookie_jar_obj );

Warum wird die Variable $jar definiert, wenn diese dann nicht verwendet wird?

Und ich sehe auch nicht, wie $cookie_jar_obj aufgebaut sein muss.

Das ist nur ein Code-Beispiel. Es macht keinen Sinn ausser zu zeigen, wie die API benutzt wird. $jar und $cookie_jar_obj müssen ein Objekt sein, dass extract_cookies() und add_cookie_header() implementiert. Vorgesehen ist dafür HTTP::Cookies.

2.)

$ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });

Und hier verstehe ich nicht, was das ganze macht.

Das Gibt LWP::UserAgent eine Datei als Cookie-Store; die Cookies werden dann, wie oben beschrieben, in dieser Datei automatisch gespeichert und beim nächsten Request wieder mitgesendet.

Und an welcher Stelle setze ich nun eigentlich den Cookie (Name, Wert, Expiration, ....)?

Du musst ein HTTP::Cookies-Objekt erstellen und dem mit set_cookie() einen neuen Cookie einfügen, etwa so:

use LWP::UserAgent;
use HTTP::Cookies;

my $ua = LWP::UserAgent->new;
my $cookie_jar = HTTP::Cookies->new;
$cookie_jar -> set_cookie(0, 'cookie_name', 'cookie_value', '/');

$ua->cookie_jar($cookie_jar);

# …

Die genauen Parameter von set_cookie kannst du der Dokumentation entnehmen.

LG,
CK