Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Convert LWP Cookies to Netscape for Firefox import

by bliako (Novice)
on Jan 11, 2018 at 20:29 UTC ( #1207133=perlquestion: print w/replies, xml ) Need Help??
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 (Abbot) 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?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1207133]
Front-paged by Arunbear
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (5)
As of 2018-02-24 10:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    When it is dark outside I am happiest to see ...














    Results (310 votes). Check out past polls.

    Notices?