On Wed, 10 Sep 2008 09:07:38 +0200
Srebrenko wrote:

> Hi list,
> 
> I'm trying to use libapreq2/Apache2::Request to access the POST
> body/payload under mod_perl2. According to the docs, one can
> potentially use APR::Request::Parser custom/generic to achieve this.
> What I'm trying to do is have Apache2::Request process POST payloads
> with "text/xml" as Content-Type.
> 
> Does anybody have an example on how to do this?
> 
> TIA,
> Srebrenko

Hopefully someone will respond who has experience with libapreq2's hook
API.  The below example (libapreq2 not used) which decodes JSON (not
XML) may provide some insight or a temporary solution.

use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::URI ();
use Apache2::Const -compile => qw(M_POST);
use JSON::XS qw(decode_json);

if ($r->method_number() == Apache2::Const::M_POST) {
  if (my $ct = $r->header_in->{'Content-Type'}) {
    if ($ct =~ /\btext\/x-json\b/i) {
      if (my $len = $r->headers_in->{'Content-Length'}) {
        die 'read limit exceded'
          if $len > ((2**10) * 10); # 10K
        my $body = '';
        $r->read($body, $len);
        if ($ct =~ /\bx-www-form-urlencoded\b/i) {
          $body = Apache2::URI::unescape_url($body);
        }
        my $json = decode_json($body);
      }
    }
  }
}

Reply via email to