Stas Bekman wrote:
Carl Brewer wrote:


I'm using Stas's read_post() call from the test directory in mp1.99-10-dev, and am using it to grab POST data of the form of an email address ..

this is giving me this :

read_post returned : username=carl%40somewhere&password=foo

Escaped the @ ... of course.

I'm curios, where's the best place to unescape it?
Should I do it in the read_post function, or afterwards?

Recommendations?


Look at CGI.pm, you could easily prototype your code after it, as it's written in pure perl. Hint: look at the function param().

For the archives, if anyone's interested, I used CGI::Util::unescape()


My read_lines() subroutine is now (cribbed extensively from
Stas's test scripts) :

$post_params = read_post($r);

sub read_post {
    use Apache::Filter ();
    use APR::Bucket ();
    use APR::Brigade ();
    use constant IOBUFSIZE => 8192;
    use Apache::Const -compile => qw(MODE_READBYTES);
    use APR::Const    -compile => qw(SUCCESS BLOCK_READ);

use CGI::Util;

    my $r = shift;
    my $debug = shift || 0;

    my @data = ();
    my $seen_eos = 0;
    my $filters = $r->input_filters();
    my $ba = $r->connection->bucket_alloc;
    my $bb = APR::Brigade->new($r->pool, $ba);

    do {
        my $rv = $filters->get_brigade($bb,
            Apache::MODE_READBYTES, APR::BLOCK_READ, IOBUFSIZE);
        if ($rv != APR::SUCCESS) {
            return $rv;
        }

        while (!$bb->empty) {
            my $buf;
            my $b = $bb->first;

$b->remove;

            if ($b->is_eos) {
                warn "EOS bucket:\n" if $debug;
                $seen_eos++;
                last;
            }

            my $status = $b->read($buf);
            warn "DATA bucket: [$buf]\n" if $debug;
            if ($status != APR::SUCCESS) {
                return $status;
            }
            push @data, $buf;
        }

$bb->destroy;

    } while (!$seen_eos);
    my $string = join '', @data;
    return CGI::Util::unescape($string);
}



Seems to work ok in lieu of Apache::Request being available.

Carl



Reply via email to