plackup /home/moo/post-echo.psgi -r Watching /home/moo/lib /home/moo/post-echo.psgi for file updates. HTTP::Server::PSGI: Accepting connections at http://0:5000/ #### moo@cow[2258]~>curl http://0:5000/ OHAI GET moo@cow[2259]~>curl http://0:5000/ -X HEAD OHAI HEAD moo@cow[2260]~>curl http://0:5000/ -X POST POST http://example.org/ User-Agent: ...snip... moo@cow[2261]~>curl http://0:5000/ -d "internet=cats in tubes" POST http://example.org/ Content-Length: 22 Content-Type: application/x-www-form-urlencoded internet=cats in tubes #### curl http://0:5000/ -F code=@/home/moo/post-echo.psgi POST http://example.org/ Expect: 100-continue Content-Length: 2408 Content-Type: multipart/form-data; boundary=----------------------------2db0025e93ba ------------------------------2db0025e93ba Content-Disposition: form-data; name="code"; filename="post-echo.psgi" Content-Type: application/octet-stream #!/usr/bin/env perl # filename: post-echo.psgi use strictures; use Plack::Request; use HTTP::Request; sub { my $env = shift; my $request = Plack::Request->new($env); my $response = $request->new_response(200); $response->content_type("text/plain; charset=UTF-8"); if ( $request->method eq "POST" ) { $request->input->read( my $buffer, $request->header("Content-Length"), 0 ); my $rerequest = HTTP::Request ->new( "POST", "http://example.org/" , $request->headers, $buffer ); $response->body( $rerequest->as_string ); } else { $response->body("OHAI " . $request->method . "\n"); } $response->finalize; };