Merge branch 'master' into 11898-no-distinct
[arvados.git] / sdk / perl / lib / Arvados / Request.pm
index f2a9b63631502ce9ed8f1053c9bd60b436d4bf15..4523f7d6b3ac38561e17c50b889201166f22baad 100644 (file)
@@ -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;