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 | |
aac7ca02 | 9 | =head1 NAME |
10 | ||
38ad3df8 | 11 | HTTP::Body::UrlEncoded - HTTP Body UrlEncoded Parser |
aac7ca02 | 12 | |
13 | =head1 SYNOPSIS | |
14 | ||
15 | use HTTP::Body::UrlEncoded; | |
16 | ||
17 | =head1 DESCRIPTION | |
18 | ||
19 | HTTP Body UrlEncoded Parser. | |
20 | ||
21 | =head1 METHODS | |
22 | ||
23 | =over 4 | |
24 | ||
25 | =item spin | |
26 | ||
27 | =cut | |
28 | ||
58050177 | 29 | sub spin { |
30 | my $self = shift; | |
aac7ca02 | 31 | |
7e2df1d9 | 32 | return unless $self->length == $self->content_length; |
33 | ||
34 | for my $pair ( split( /[&;]/, $self->{buffer} ) ) { | |
aac7ca02 | 35 | |
7e2df1d9 | 36 | my ( $name, $value ) = split( /=/, $pair ); |
aac7ca02 | 37 | |
7e2df1d9 | 38 | next unless defined $name; |
39 | next unless defined $value; | |
aac7ca02 | 40 | |
7e2df1d9 | 41 | $name =~ tr/+/ /; |
f4600b8f | 42 | $name =~ s/$DECODE/chr(hex($1))/eg; |
7e2df1d9 | 43 | $value =~ tr/+/ /; |
aac7ca02 | 44 | $value =~ s/$DECODE/chr(hex($1))/eg; |
45 | ||
7e2df1d9 | 46 | $self->param( $name, $value ); |
47 | } | |
aac7ca02 | 48 | |
49 | $self->{buffer} = ''; | |
f4600b8f | 50 | $self->{state} = 'done'; |
58050177 | 51 | } |
52 | ||
aac7ca02 | 53 | =back |
54 | ||
55 | =head1 AUTHOR | |
56 | ||
57 | Christian Hansen, C<ch@ngmedia.com> | |
58 | ||
59 | =head1 LICENSE | |
60 | ||
61 | This library is free software . You can redistribute it and/or modify | |
62 | it under the same terms as perl itself. | |
63 | ||
64 | =cut | |
65 | ||
32b29b79 | 66 | 1; |