http://www.perlmonks.org?node_id=1207133

bliako has asked for the wisdom of the Perl Monks concerning the following question:

Esteemed Monks,

I have a question regarding the HTTP cookies of an LWP object. In particular I want to save them in three different formats (LWP, Netscape, Microsoft) after LWP fetches a page.

So far, I have told LWP to keep cookies as thus:
my $ua = LWP::UserAgent->new(); $ua->cookie_jar(HTTP::Cookies->new());
Then I tell it to save cookies:
Path::Tiny::path("cookies.LWP.txt")->spew(join("\n", $ua->cookie_jar() +->as_string));

(LWP uses what is called 'SetCookies3' cookies)

But I now need to save the same cookies in Netscape format too so that I can import it in Firefox. And also in Microsoft format for import in IE (Oh Lord, set a guard upon my lips! ... θου, Κύριε, φυλακήν τω στόματί μου).

I am wondering whether I can do it the way I dreamed last night in my sleep:
my $NC = HTTP::Cookies::Netscape->new($ua->cookie_jar()); my $MC = HTTP::Cookies::Microsoft->new($ua->cookie_jar()); Path::Tiny::path("cookies.Netscape.txt")->spew($NC->as_string); Path::Tiny::path("cookies.Microsoft.txt")->spew($MC->as_string);

Alas no. (HTTP::Cookies::Netscape also fails to read an LWP cookie file.)

Is there code out there who can convert LWPCookie->Netscape and LWPCookie->Microsoft?

brotherly regards,

Bliako

Replies are listed 'Best First'.
Re: Convert LWP Cookies to Netscape for Firefox import
by hippo (Bishop) on Jan 12, 2018 at 09:54 UTC

    Based on the documentation for scan() I have put together this basic PoC which works for me:

    #!/usr/bin/env perl use strict; use warnings; use HTTP::Cookies; my $jar = HTTP::Cookies->new(file => 'cookies.tmp.txt'); my $nsjar = HTTP::Cookies::Netscape->new(file => 'netscape'); my $copy = sub {$nsjar->set_cookie(@_)}; $jar->scan ($copy); $nsjar->save;

    This assumes your existing LWP jar file is 'cookies.tmp.txt' so obviously change that to the real path you use. It creates a new jar in Netscape format called simply 'netscape'. I did not attempt to do the same for MS cookies but would be very surprised if the same technique did not apply there.

      thanks, that's what I ended doing eventually. Your solution works fine for Netscape cookies.

      I can't test writing MS cookies because HTTP::Cookies::Microsoft looks to me that it needs to load Win32 module in order to enquire about username and I don't have that.

      as for specs, that helped:

      http://www.cookiecentral.com/faq/#3.5

      But for the ms cookie, the source of HTTP::Cookies::Microsoft.pm maybe the best help:

      https://searchcode.com/codesearch/view/22686059/

      notice the expiration and creation time.

Re: Convert LWP Cookies to Netscape for Firefox import
by Anonymous Monk on Jan 12, 2018 at 08:40 UTC
    have u researched modules or do u have links to the specs for file formats?