rjray / rpc-xml

A Perl implementation of the XML-RPC specification
https://metacpan.org/release/RPC-XML
24 stars 14 forks source link

Decompression not working with callback in request #15

Open fra-iesus opened 6 years ago

fra-iesus commented 6 years ago
#!/usr/bin/env perl
use 5.014;
use RPC::XML;
use RPC::XML::Client;

my $url = 'https://wordpress.com/xmlrpc.php';
my $client = RPC::XML::Client->new($url);
$client->request->accept_decodable;
print '"Accept-Encoding" set to ' . $client->request->header('Accept-Encoding') . "\n";
my $request = RPC::XML::request->new('wp.getPostTypes');
my $response = $client->send_request($request);
print "$response\n";

"Accept-Encoding" set to gzip, x-gzip, deflate, x-bzip2

not well-formed (invalid token) at line 1, column 0, byte 0: ?PMk1??+???ق??x ^ ? at /usr/share/perl5/RPC/XML/Client.pm line 402.

Everything works correctly in case request is fired w/o callback and response data are processed afterwards.

fra-iesus commented 6 years ago

There are 2 issues with that: 1) compression is not detected, so $data_in doesn't go to inflate(), but directly to parse_more() 2) in case detection of compression is changed from $resp->content_encoding to $resp->{_headers}->{content-encoding} (I know - internal variable, I don't mind it for test), result of inflate() is empty string