use base 'Class::Accessor::Fast';
use Carp;
-use IO::Handle;
-use File::Temp;
+use IO::File;
__PACKAGE__->mk_accessors( qw[ enviroment request stdin stdout stderr ] );
my $self = {
request => $request,
restored => 0,
- stdin => File::Temp->new,
- stdout => File::Temp->new,
- stderr => File::Temp->new
+ stdin => IO::File->new_tmpfile,
+ stdout => IO::File->new_tmpfile,
+ stderr => IO::File->new_tmpfile
};
$self->{enviroment} = {
if ( $self->request->content_length ) {
- $self->stdin->write( $self->request->content )
- or croak("Can't write content: $!");
+ $self->stdin->syswrite( $self->request->content )
+ or croak("Can't write content to stdin: $!");
- seek( $self->stdin, 0, 0 )
+ $self->stdin->sysseek( 0, SEEK_SET )
or croak("Can't seek stdin: $!");
}
open( STDERR, '>&', $self->{restore}->{stderr} )
or croak("Can't restore stderr: $!");
-
+
+ $self->stdin->sysseek( 0, SEEK_SET )
+ or croak("Can't seek stdin: $!");
+
+ $self->stdout->sysseek( 0, SEEK_SET )
+ or croak("Can't seek stdout: $!");
+
+ $self->stderr->sysseek( 0, SEEK_SET )
+ or croak("Can't seek stderr: $!");
+
$self->{restored}++;
}
=head1 NAME
-HTTP::Request::AsCGI - Create a CGI enviroment from a HTTP::Request
+HTTP::Request::AsCGI - Setup a CGI enviroment from a HTTP::Request
=head1 SYNOPSIS
+ use CGI;
+ use HTTP::Request;
+ use HTTP::Request::AsCGI;
+
+ my $request = HTTP::Request->new( GET => 'http://www.host.com/' );
+ my $stdout;
+
+ {
+ my $c = HTTP::Request::AsCGI->new($request)->setup;
+ my $q = CGI->new;
+
+ print $q->header,
+ $q->start_html('Hello World'),
+ $q->h1('Hello World'),
+ $q->end_html;
+
+ $stdout = $c->stdout;
+
+ # enviroment and descriptors will automatically be restored when $c is destructed.
+ }
+
+ while ( my $line = $stdout->getline ) {
+ print $line;
+ }
+
=head1 DESCRIPTION
=head1 METHODS
=item new
+=item enviroment
+
=item setup
=item restore