diff -r 472494ced67f Lib/cgi.py --- a/Lib/cgi.py Sat Apr 06 20:53:12 2013 -0700 +++ b/Lib/cgi.py Sun Apr 07 12:38:45 2013 +0300 @@ -461,6 +461,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': @@ -472,6 +477,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 if fp is None: self.fp = sys.stdin.buffer # self.fp.read() must return bytes diff -r 472494ced67f Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py Sat Apr 06 20:53:12 2013 -0700 +++ b/Lib/test/test_cgi.py Sun Apr 07 12:38:45 2013 +0300 @@ -374,6 +374,22 @@ 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) + BOUNDARY = "---------------------------721837373350705526688164684"