如何在 Perl 中对 HTTP GET 查询字符串进行编码?
这个问题与 什么有关在 Perl 中发出 HTTP GET 请求的最简单方法?。
在通过 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);
This question is somewhat related to What’s the simplest way to make a HTTP GET request in Perl?.
Before making the request via LWP::Simple
I have a hash of query string components that I need to serialize/escape. What's the best way to encode the query string? It should take into account spaces and all the characters that need to be escaped in valid URIs. I figure it's probably in an existing package, but I'm not sure how to go about finding it.
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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
URI::Escape 可能是最直接的答案,因为其他人已经给出了,但我建议对整个事情使用 URI 对象。 URI 自动为您转义 GET 参数(使用 URI::Escape)。
作为额外的奖励,LWP::Simple get 函数将采用 URI 对象作为参数而不是字符串。
URI::Escape is probably the most direct answer, as other have given, but I would recommend using a URI object for the entire thing. URI automatically escapes the GET parameters for you (using URI::Escape).
As an added bonus, LWP::Simple's get function will take a URI object as it's argument instead of a string.
URI::Escape 可以满足您的要求。
URI::Escape does what you want.
URI 比
URI::Escape
简单得多。 方法 query_form() 接受哈希或哈希引用:URI is far simpler than
URI::Escape
for this. The method query_form() accepts a hash or a hashref:使用模块 URI 使用查询参数构建 URL:
我找到了这个解决方案 此处。
Use the module URI to build the URL with the query parameters:
I found this solution here.
URI::Escape 是您可能正在考虑的模块。
URI::Escape is the module you are probably thinking of.