X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/chopwood/blobdiff_plain/f2e194ee85b9538d5168fe776e1cdbc00ce8ca9d..76ee7d4f64bc1f20013f44c8045cd708ef0b9641:/cgi.py diff --git a/cgi.py b/cgi.py index 1aa2917..6006062 100644 --- a/cgi.py +++ b/cgi.py @@ -123,6 +123,8 @@ class HTTPOutput (O.FileOutput): for h in O.http_headers(content_type = content_type, **kw): me.writeln(h) me.writeln('') + if METHOD == 'HEAD': + HEADER_DONE() def cookie(name, value, **kw): """ @@ -318,6 +320,7 @@ PARAM = [] PARAMDICT = {} PATH = [] SSLP = False +HEADER_DONE = lambda: None ## Regular expressions for splitting apart query and cookie strings. R_QSPLIT = RX.compile('[;&]') @@ -388,7 +391,7 @@ def cgiparse(): METHOD = getenv('REQUEST_METHOD') ## Acquire the query string. - if METHOD == 'GET': + if METHOD in ['GET', 'HEAD']: q = getenv('QUERY_STRING') elif METHOD == 'POST': @@ -398,7 +401,8 @@ def cgiparse(): if not n.isdigit(): raise U.ExpectedError, (500, "Invalid CONTENT_LENGTH") n = int(n, 10) - if getenv('CONTENT_TYPE') != 'application/x-www-form-urlencoded': + ct = getenv('CONTENT_TYPE') + if ct != 'application/x-www-form-urlencoded': raise U.ExpectedError, (500, "Unexpected content type `%s'" % ct) q = SYS.stdin.read(n) if len(q) != n: @@ -465,6 +469,8 @@ class Subcommand (SC.Subcommand): the list of path elements is non-empty. """ + global HEADER_DONE + ## We're going to make a pass over the supplied parameters, and we'll ## check them off against the formal parameters as we go; so we'll need ## to be able to look them up. We'll also keep track of the ones we've