Comment puis-je encoder HTTP OBTENIR les chaînes de requête en Perl?
Cette question est liée en quelque sorte à Quelle est la façon la plus simple de faire une requête HTTP GET en Perl?.
Avant de faire la demande via LWP::Simple
j'ai une table de hachage de chaîne de requête composants que j'ai besoin de sérialiser/escape. Quelle est la meilleure façon d'encoder la chaîne de requête? Il convient de prendre en compte les espaces et tous les caractères doivent être échappés en cours de validité, les Uri. Je me dis qu'il est sûrement dans un package existant, mais je ne suis pas sûr de la façon de trouver.
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);
OriginalL'auteur cdleary | 2009-01-16
Vous devez vous connecter pour publier un commentaire.
URI::Escape fait ce que vous voulez.
J'ai bien de faire ça aussi, mais des plans d'imbrication n'a tout simplement pas regarder à droite pour moi.
Carte à l'intérieur pour(chaque) avec push sons de même compliqué pour moi, mais il introduire inutiles variable temporaire.
OriginalL'auteur Leon Timmermans
URI::Escape est probablement la plus directe de la réponse, comme d'autres ont donné, mais je vous conseille d'utiliser un URI objet pour l'ensemble de la chose. URI s'échappe automatiquement les paramètres GET pour vous (à l'aide d'URI::Escape).
Comme un bonus supplémentaire, LWP::Simple de obtenir fonction sera de prendre un URI objet de l'argument au lieu d'une chaîne.
remarque cela nécessitera: "utiliser l'URI;"
OriginalL'auteur gpojd
URI est beaucoup plus simple que
URI::Escape
pour cela. La méthode query_form() accepte une table de hachage ou d'un hashref:OriginalL'auteur
Use LWP::UserAgent:
Il prend soin de l'encodage pour vous.
Si vous voulez un plus générique solution de codage, voir HTML::les Entités.
EDIT: URI::Escape est un meilleur choix.
Je me trompe peut-être, mais n'a pas de HTML::Entités coder des choses comme < > tout en URI::Escape s'échappe des choses pour les URI, comme un espace à 20%. Ils codent pour des choses différentes, l'une pour HTML, et l'autre pour les URI.
Sauf si je suis en manque de quelque chose. Ce n'est PAS ajouter une chaîne de requête à l'URI de la demande, il ajoute dans les arguments que les en-Têtes HTTP, ce qui est complètement différent. search.cpan.org/~gaas/libwww-perl-5.834/lib/LWP/...
OriginalL'auteur Joe Casadonte
Utiliser le module URI pour construire l'URL avec les paramètres de la requête:
J'ai trouvé cette solution ici.
OriginalL'auteur Flimm
URI::Escape est le module que vous pensez probablement.
OriginalL'auteur SquareCog