# Convert string to HTTP::Cookie object # Only handles a single cookie for now # If no header - create fake one: "Cookies:" # cookie := # header_id ':' cookie_setting+ # ; # cookie_setting := name '=' value ('; '| $) # ; # name := [^=\s]+ # ; # value = [^"\s]* | '"' [^"]* '"' # ; sub str2cookie_jar { # Returns: HTTP::Cookies object my $self = shift; my ( $cookieStr, # as_string() representation ) = @_; my $cookie_jar = HTTP::Cookies->new(); $self->log("str2cookie_jar: $cookieStr\n") if $DEBUG & 0x04; if ($cookieStr !~ /([^:]+):/) { $cookieStr = "Cookies:" . $cookieStr; } my ($cookie_header, $cookie_rest) = $cookieStr =~ /([^:]+):\s*(\S.*)/; die "Bad cookie_header in '$cookieStr'\n" if !defined($cookie_header); die "Bad cookie body in '$cookieStr'\n" if !defined($cookie_rest); my %cookieh; my @cookiesettings = split(/;\s*/,$cookie_rest); my $version = $self->{cookieVersion}; my $path = $self->{cookiePath}; my $domain = $self->{cookieDomain}; my $key; my $value; foreach my $cs (@cookiesettings) { if ($cs !~ /^([^=]+)=(.*)/) { if ($cs =~ /^\S+$/) { $key = $cs; # Just presense $value = ""; } else { $self->error("Bad cookie setting '$cs' in '$cookieStr'\n"); return $cookie_jar; } } else { $key = $1; $value = $2; } if ($value =~ /^([\'\"])(.*)\1$/) { $value = $2; } $self->log("Cookie: $key=$value") if $DEBUG & 0x04; $cookie_jar->set_cookie($version, $key, $value, $path, $domain); } return $cookie_jar; }