chromium/third_party/blink/web_tests/http/tests/navigation/resources/postresult.pl

#!/usr/bin/perl
# Simple script to generate a POST result.
#
# Depending on which button was pushed in the form, we either generate a direct
# result page, or we use the pattern where the post returns a 303 redirect,
# and then the resulting GET yields the true POST result.  Sites do this trick
# to avoid having POSTS in the b/f list, so you don't run into POSTs getting
# resubmitted by accident.

use CGI;
$query = new CGI;
$submitWithPost = $query->param('submitwithpost');
$submitWithPostRedirect = $query->param('submitwithpostredirect');
$submitWithPostRedirectReload = $query->param('submitwithpostredirectreload');
$redirectHappened = $query->param('redirectHappened');
$method = $query->request_method();

if (($submitWithPost && $method eq "POST") || ($redirectHappened && $method eq "GET")) {

    $textFieldData = $query->param('textfield1');

    print "Content-type: text/html\r\n";
    print "Cache-Control: no-store, no-cache, must-revalidate\r\n";
    print "\r\n";

    print <<HERE_DOC_END;
    <html>
    <body style="font-size: 32">
    This is just a minimal page that we navigate in response to an HTTP POST.
    <br>
    <br>
    If the next line is empty after the colon, it probably means that we made
    a mistake and requested this page with a GET with no query instead of a POST.
    <br>
    <br>
    The first text field contained: $textFieldData
    <br>
    This page was requested with an HTTP $method
    </body>
    </html>
HERE_DOC_END

} elsif ($submitWithPostRedirectReload && $method eq "POST") {

    print "Status: 303 See Other\r\n";
    print "Location: reloadresult.pl\r\n";
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    This page should not be seen - it is a 303 redirect to another page.
    </body>
    </html>
HERE_DOC_END

} elsif ($submitWithPostRedirect && $method eq "POST") {

    $urlQuery = $query->query_string;
    $urlQuery =~ s/;/&/g;       # cheapo conversion from POST data to URL query format
    # redirect to the same page, with an added param to show we've already been here
    $urlQuery .= "&redirectHappened=true";

    print "Status: 303 See Other\r\n";
    printf "Location: postresult.pl?%s\r\n", $urlQuery;
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    This page should not be seen - it is a 303 redirect to another page.
    </body>
    </html>
HERE_DOC_END

} else {

    $queryString = $query->query_string;
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    Test failure: postresult.pl was called with an unexpected set of parameters.
    <br>
    This page was requested with an HTTP $method
    <br>
    The query parameters are: $queryString
    </body>
    </html>
HERE_DOC_END

}