diff -r dec10a3eb95f Lib/cgi.py --- a/Lib/cgi.py Sat Feb 23 08:19:00 2013 +0200 +++ b/Lib/cgi.py Sat Feb 23 16:28:55 2013 +0100 @@ -438,6 +438,11 @@ if headers is None: headers = {'content-type': "application/x-www-form-urlencoded"} + # Read all HTTP headers + for key, value in environ.items(): + if key.startswith("HTTP_"): + hkey = key.split("_",1)[1].replace("_","-").lower() + headers[hkey] = value if headers is None: headers = {} if method == 'POST': @@ -449,6 +454,11 @@ self.qs_on_post = environ['QUERY_STRING'] if 'CONTENT_LENGTH' in environ: headers['content-length'] = environ['CONTENT_LENGTH'] + # Read all HTTP headers + for key, value in environ.items(): + if key.startswith("HTTP_"): + hkey = key.split("_",1)[1].replace("_","-").lower() + headers[hkey] = value self.fp = fp or sys.stdin self.headers = headers self.outerboundary = outerboundary diff -r dec10a3eb95f Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py Sat Feb 23 08:19:00 2013 +0200 +++ b/Lib/test/test_cgi.py Sat Feb 23 16:28:55 2013 +0100 @@ -386,6 +386,21 @@ cgi.parse_header('form-data; name="files"; filename="fo\\"o;bar"'), ("form-data", {"name": "files", "filename": 'fo"o;bar'})) + def test_fieldstorage_http_headers(self): + referer = 'http://localhost/' + user_agent = 'Python-urllib/X.Y' + + # Test some headers with GET method + env = {'HTTP_REFERER':referer,'HTTP_USER_AGENT':user_agent,'METHOD':'GET'} + fs = cgi.FieldStorage(environ=env) + self.assertEqual(fs.headers.get("referer"),referer) + self.assertEqual(fs.headers.get("user-agent"),user_agent) + + # Test some headers with POST method + env = {'HTTP_REFERER':referer,'HTTP_USER_AGENT':user_agent,'METHOD':'POST'} + fs = cgi.FieldStorage(environ=env) + self.assertEqual(fs.headers.get("referer"),referer) + self.assertEqual(fs.headers.get("user-agent"),user_agent) def test_main(): run_unittest(CgiTests)