我正在mod_perl环境中编写API,但无法读取POST请求的内容。该API的整体功能是将一些数据写入服务器,而协同处理程序则负责从服务器读取数据。
根据标准,该读取处理程序使用GET,而写入处理程序使用POST。 GET处理程序可以很好地读取请求内容,但是POST处理程序不会返回任何内容,尽管具有正确的Content-Length。签名和所有内容都是相同的。最重要的是,当我将写处理程序的请求类型更改为GET时,它读取的内容就很好了。
我看到一些文档,默认情况下POST的内容是一种编码形式,但是Apache2 :: RequestRec和Apache2 :: RequestIO文档似乎表明我仍然应该可以使用read()函数获取内容。就像我说的那样,read()不返回任何内容。这包括当我手动将POST的Content-Type手动设置为诸如text / plain之类的时候。
我真的很想符合标准并使用POST写入数据。为了读取POST内容,我在做什么错了?
下面是呼叫站点和处理程序的相关部分。我跳过所有签名生成等的内容,以尽可能减少这种情况。谢谢!
use HTTP::Request::Common;
use HTTP::Response;
use LWP::UserAgent;
use JSON;
use MIME::Base64;
use Digest::SHA qw( hmac_sha256_hex sha256_hex );
my %params = (
key => "1.234",
data => "11111111"
);
my $json = encode_json \%params;
my $encoded_json = encode_base64($json);
my $param_sha256 = sha256_hex($encoded_json);
my $ua = LWP::UserAgent->new;
my $request = POST $api_url, #Change this to a GET and it works
"Host" => $api_host,
Content => $encoded_json
;
my $response = $ua->request($request);
use Apache2::RequestRec;
use Apache2::RequestIO;
sub handler {
my $r = shift;
my $len = $r->headers_in->{'Content-Length'}; #Non-zero integer
my $encoded_parameters;
$r->read($encoded_parameters, $len); #Empty
}