декодировать форму-urlencoded в хэш - PullRequest
2 голосов
/ 13 марта 2012

Ответ, который я получаю на запрос LWP: application/x-www-form-urlencoded Возможно ли преобразовать текст этого в хеш с помощью какого-либо метода объекта?

1 Ответ

7 голосов
/ 13 марта 2012
# from a HTTP::Response object
my $urlencoded = $response->content;
  1. Vars in CGI возвращает хэш.

    use CGI qw();
    CGI->new($urlencoded)->Vars;
    
  2. parameters in Plack::Request возвращает объект Hash::MultiValue, который фактически является подходящей структурой данных для этого.

    use Plack::Request qw();
    Plack::Request->new({QUERY_STRING => $urlencoded})->parameters;
    
  3. param in APR::Request / libapreq2 - не совсем Perl-хеш, но объект XS с прикрепленной магией, поведение которой достаточно близко.

    insert hand-waving here, no libapreq2 available right now for testing
    
  4. url_params_mixed in URL::Encode

    require URL::Encode::XS;
    use URL::Encode qw(url_params_mixed);
    url_params_mixed $urlencoded;
    
  5. parse_query_string in CGI::Deurl::XS

    use CGI::Deurl::XS 'parse_query_string';
    parse_query_string $urlencoded;
    
  6. query_form в URI тоже хорошо работает, в крайнем случае; и query_form_hash в URI::QueryParam.

    use URI qw();
    URI->new("?$urlencoded")->query_form;
    
    use URI::QueryParam qw();
    URI->new("?$urlencoded")->query_form_hash;
    
  7. Бонус: также см. HTTP::Body::UrlEncoded, используемый Catalyst .

...