12078: Fix crash encoding booleans with libjson-perl 2.90.
[arvados.git] / sdk / perl / lib / Arvados / Request.pm
index 4902b75c37455c7c55a3cdb4b0ef525b134b1944..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;
@@ -18,7 +22,7 @@ sub _init
 {
     my $self = shift;
     $self->{'ua'} = new LWP::UserAgent(@_);
-    $self->{'ua'}->agent ("libarvados-perl/".$Warehouse::VERSION);
+    $self->{'ua'}->agent ("libarvados-perl/".$Arvados::VERSION);
     $self;
 }
 
@@ -32,13 +36,22 @@ sub process_request
 {
     my $self = shift;
     my %req;
-    $req{$self->{'method'}} = $self->{'uri'};
+    my %content;
+    my $method = $self->{'method'};
+    if ($method eq 'GET' || $method eq 'HEAD') {
+        $content{'_method'} = $method;
+        $method = 'POST';
+    }
+    $req{$method} = $self->{'uri'};
     $self->{'req'} = new HTTP::Request (%req);
     $self->{'req'}->header('Authorization' => ('OAuth2 ' . $self->{'authToken'})) if $self->{'authToken'};
-    my %content;
+    $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) {