in reply to Re: Simulating --keep-session-cookies wget option with LWP ?
in thread Simulating --keep-session-cookies wget option with LWP ?

I can read in Re: Passing a cookie with LWP::UserAgent about session cookies are deleted when browser (UserAgent in LWP) is closed, so every thread which I start will start with an new cookie

My last try with HTTP::Cookies was:

# try to simulate wget: my $cookie_jar = HTTP::Cookies->new( file => "$cookie", autosave => 1, ); my $ua = LWP::UserAgent->new ; $ua->timeout(2); $ua->cookie_jar($cookie_jar); $ua->credentials ("$host:$port","Tomcat Manager Application",$user,$pa +ssword); my $request= HTTP::Request->new (GET=> "http://$host:$port/manager/sta +tus?XML=true"); my $status=$ua->request ($request); if ($status->is_success) { $page=$status->decoded_content(); } else { print STDERR $status->status_line, "\n"; return 1; }
Thanks!

Replies are listed 'Best First'.
Re^3: Simulating --keep-session-cookies wget option with LWP ?
by Corion (Patriarch) on Sep 27, 2011 at 10:22 UTC

    Your code works for me, once I fix it to actually become a program:

    use strict; use HTTP::Cookies; use LWP::UserAgent; # try to simulate wget: my $cookie_jar = HTTP::Cookies->new( file => "mycookie.cookie", autosave => 1, ); my $ua = LWP::UserAgent->new; $ua->timeout(2); $ua->cookie_jar($cookie_jar); $ua->env_proxy; if( !@ARGV) { warn "Requesting page"; my $request= HTTP::Request->new (GET=> "http://www.google.com/webhp?hl +=en"); my $status=$ua->request ($request); if ($status->is_success) { print $status->decoded_content(); } else { print STDERR $status->status_line, "\n"; return 1; } }; use Data::Dumper; warn "Cookies in jar:"; $cookie_jar->scan(sub { warn Dumper \@_ });

    It (re)generates the cookie file if run without any command line argument, and if run with a command line argument, it just dumps the cookies from the file.

    Whatever your problem seems to be, I would suspect that it lies elsewhere.

      Ok, I tested your script with google and it works.

      Then it maybe related with tomcat auth issue:
      I changed your script to work with my tomcat manager:

      use strict; use HTTP::Cookies; use LWP::UserAgent; # try to simulate wget: my $cookie_jar = HTTP::Cookies->new( file => "mycookie-tomcat.cookie", autosave => 1, ); my $ua = LWP::UserAgent->new; $ua->credentials ("host:8080","Tomcat Manager Application","user","pas +sword"); $ua->timeout(2); $ua->cookie_jar($cookie_jar); #$ua->env_proxy; if( !@ARGV) { warn "Requesting page"; my $request= HTTP::Request->new (GET=> "http://host:8080/manager/statu +s?XML=true"); my $status=$ua->request ($request); if ($status->is_success) { print $status->decoded_content(); } else { print STDERR $status->status_line, "\n"; return 1; } }; use Data::Dumper; warn "Cookies in jar:"; $cookie_jar->scan(sub { warn Dumper \@_ });
      And then it printout cookie when I launch without parameters:
      ... $VAR1 = [ 0, 'JSESSIONID', '1F627DA1EED0B70CC94F4D3EB9ECD378.host', '/manager', 'host.local', undef, 1, undef, undef, 1, {} ]; ...

      but file of cookie is empty:

      $ cat mycookie-tomcat.cookie #LWP-Cookies-1.0

      I discover in tcpdump / wireshark, tomcat is returning first an 401 error with "You are not authorized to view this page. If you have not changed ...", setting a cookie wich is used by lwp after (it try again the access and the page is loaded correctly), but seems like not saved in the file

      Thank you !
      PD: What is wrong with my question, so I'm getting negative reputation ?

        Your cookie looks like this:

        $VAR1 = [ 0, 'JSESSIONID', '1F627DA1EED0B70CC94F4D3EB9ECD378.host', '/manager', 'host.local', undef, 1, undef, undef, 1, {} ];

        The HTTP::Cookies documentation says about the format:

        0 version 1 key 2 val 3 path 4 domain 5 port 6 path_spec 7 secure 8 expires 9 discard 10 hash

        The ninth parameter, discard is 1 in your cookie. Why do you think that HTTP::UserAgent should save this cookie into a file?

        As to your "negative" reputation, your nodes are currently at "-1" and "0" respectively. I downvoted both of them, because you did not do show any relevant code first, and then did no work on making the problem easily reproducible outside your specific environment.