如何在Perl中编码HTTP GET查询字符串?

这个问题与 What’s the simplest way to make a HTTP GET request in Perl?有些有关.

在通过LWP :: Simple发出请求之前我有一个需要序列化/转义的查询字符串组件的哈希.什么是编码查询字符串的最佳方法?它应该考虑到需要在有效URI中转义的空格和所有字符.我认为这可能是一个现有的包,但我不知道如何去找到它.

use LWP::Simple;
my $base_uri = 'http://example.com/rest_api/';
my %query_hash = (spam => 'eggs',foo => 'bar baz');
my $query_string = urlencode(query_hash); # Part in question.
my $query_uri = "$base_uri?$query_string";
# http://example.com/rest_api/?spam=eggs&foo=bar+baz
$contents = get($query_uri);

解决方法

URI::Escape做你想要的
use URI::Escape;

sub escape_hash {
    my %hash = @_;
    my @pairs;
    for my $key (keys %hash) {
        push @pairs,join "=",map { uri_escape($_) } $key,$hash{$key};
    }
    return join "&",@pairs;
}

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...