X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/dc706977b754f7b5b0e5835ef80a2b59bc1773f8..bb91f86ea02e3535e3953ee0916dd6877bf585f7:/sdk/perl/lib/Arvados/Request.pm diff --git a/sdk/perl/lib/Arvados/Request.pm b/sdk/perl/lib/Arvados/Request.pm index f2a9b63631..4523f7d6b3 100644 --- a/sdk/perl/lib/Arvados/Request.pm +++ b/sdk/perl/lib/Arvados/Request.pm @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + package Arvados::Request; use Data::Dumper; use LWP::UserAgent; @@ -42,16 +46,19 @@ sub process_request $self->{'req'} = new HTTP::Request (%req); $self->{'req'}->header('Authorization' => ('OAuth2 ' . $self->{'authToken'})) if $self->{'authToken'}; $self->{'req'}->header('Accept' => 'application/json'); + + # allow_nonref lets us encode JSON::true and JSON::false, see #12078 + my $json = JSON->new->allow_nonref; my ($p, $v); while (($p, $v) = each %{$self->{'queryParams'}}) { - $content{$p} = (ref($v) eq "") ? $v : JSON::encode_json($v); + $content{$p} = (ref($v) eq "") ? $v : $json->encode($v); } my $content; while (($p, $v) = each %content) { $content .= '&' unless $content eq ''; - $content .= lean_uri_escape($p); + $content .= uri_escape($p); $content .= '='; - $content .= lean_uri_escape($v); + $content .= uri_escape($v); } $self->{'req'}->content_type("application/x-www-form-urlencoded; charset='utf8'"); $self->{'req'}->content(Encode::encode('utf8', $content)); @@ -94,12 +101,4 @@ sub get_headers "" } -# lean_uri_escape consumes about half as much memory -# as URI::Escape::uri_escape. -sub lean_uri_escape { - my ($text) = @_; - $text =~ s/([^A-Za-z0-9\-\._~])/$URI::Escape::escapes{$&}/ge; - return $text; -} - 1;