Commit | Line | Data |
---|---|---|
4f5db602 | 1 | package HTTP::Body::UrlEncoded; |
32b29b79 | 2 | |
3 | use strict; | |
4 | use base 'HTTP::Body'; | |
5 | use bytes; | |
6 | ||
f4600b8f | 7 | our $DECODE = qr/%([0-9a-fA-F]{2})/; |
7e2df1d9 | 8 | |
58050177 | 9 | sub spin { |
10 | my $self = shift; | |
11 | ||
7e2df1d9 | 12 | return unless $self->length == $self->content_length; |
13 | ||
14 | for my $pair ( split( /[&;]/, $self->{buffer} ) ) { | |
15 | ||
16 | my ( $name, $value ) = split( /=/, $pair ); | |
17 | ||
18 | next unless defined $name; | |
19 | next unless defined $value; | |
20 | ||
7e2df1d9 | 21 | $name =~ tr/+/ /; |
f4600b8f | 22 | $name =~ s/$DECODE/chr(hex($1))/eg; |
7e2df1d9 | 23 | $value =~ tr/+/ /; |
f4600b8f | 24 | $value =~ s/$DECODE/chr(hex($1))/eg; |
7e2df1d9 | 25 | |
26 | $self->param( $name, $value ); | |
27 | } | |
58050177 | 28 | |
7e2df1d9 | 29 | $self->{buffer} = '' |
f4600b8f | 30 | $self->{state} = 'done'; |
58050177 | 31 | } |
32 | ||
32b29b79 | 33 | 1; |