From ced76357828bd39dda28ed0395a1db4f61d090c2 Mon Sep 17 00:00:00 2001 From: Flaviu Mates Date: Wed, 20 Mar 2019 19:13:56 +0200 Subject: [PATCH] TT#53575 Fix next page method * use URI in order to remove doubling of query parameters because they were seen as array refs Change-Id: I73e25860381d4dcba0197b40d603a6d4933b6b84 (cherry picked from commit 625692f35d2229598de33247900570cfd1781369) --- lib/NGCP/API/Client.pm | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/NGCP/API/Client.pm b/lib/NGCP/API/Client.pm index 56f99d0..a4fc9b7 100644 --- a/lib/NGCP/API/Client.pm +++ b/lib/NGCP/API/Client.pm @@ -8,6 +8,7 @@ use IO::Socket::SSL; use LWP::UserAgent; use Readonly; use Encode; +use URI; my $config; @@ -104,18 +105,16 @@ sub request { } sub next_page { - my ($self, $uri) = @_; - - (my $params = $uri) =~ s/^[^?]+\?//; - $params =~ s/[&?]rows(=\d+)?//; - $params =~ s/[&?]page(=\d+)?//; + my ( $self, $uri ) = @_; + my $uri_obj = URI->new( $uri ); unless ($self->{_ua}) { ($self->{_ua},$self->{_urlbase}) = $self->_create_ua($uri); - $self->{_collection_url} = sprintf "https://%s%s%spage=1&rows=%d", $self->{_urlbase}, - $uri =~ m#^/# ? $uri : "/".$uri, - $uri =~ m#\?# ? '&' : '?', - $self->{_rows}; + my %params = $uri_obj->query_form; + $params{page} //= 1; + $params{rows} //= $self->{_rows}; + $uri_obj->query_form( \%params ); + $self->{_collection_url} = sprintf "https://%s%s", $self->{_urlbase}, $uri_obj->as_string; } return unless $self->{_collection_url}; @@ -124,14 +123,19 @@ sub next_page { my $res = NGCP::API::Client::Result->new($self->{_ua}->request($req)); + my $collection_uri_obj = URI->new( $self->{_collection_url} ); + undef $self->{_collection_url}; my $data = $res->as_hash(); if ($data && ref($data) eq 'HASH') { - $uri = $data->{_links}->{next}->{href}; - return $res unless $uri && $uri =~ /page/; - $uri .= '&'.$params if $params && $uri !~ /\Q$params\E/; - $self->{_collection_url} = $self->_get_url($self->{_urlbase},$uri) if $uri; + $uri_obj = URI->new( $data->{_links}->{next}->{href} ); + return $res unless $uri_obj; + my %params = $uri_obj->query_form; + return $res unless grep { $_ eq 'page' } keys %params; + %params = ($collection_uri_obj->query_form, $uri_obj->query_form); + $uri_obj->query_form( \%params ); + $self->{_collection_url} = $self->_get_url($self->{_urlbase},$uri_obj->as_string) if $uri_obj; } return $res;