diff -r aea58e1cae75 -r 061eb75339e2 Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py Sun Sep 08 14:14:38 2013 +0200 +++ b/Lib/test/test_urllib2.py Sun Sep 08 13:03:40 2013 -0400 @@ -1466,16 +1466,25 @@ self.assertEqual(str(err), expected_errmsg) class RequestTests(unittest.TestCase): + class PutRequest(Request): + method='PUT' def setUp(self): self.get = Request("http://www.python.org/~jeremy/") self.post = Request("http://www.python.org/~jeremy/", "data", headers={"X-Test": "test"}) + self.head = Request("http://www.python.org/~jeremy/", method='HEAD') + self.put = self.PutRequest("http://www.python.org/~jeremy/") + self.force_post = self.PutRequest("http://www.python.org/~jeremy/", + method="POST") def test_method(self): self.assertEqual("POST", self.post.get_method()) self.assertEqual("GET", self.get.get_method()) + self.assertEquil("HEAD", self.head.get_method()) + self.assertEqual("PUT", self.put.get_method()) + self.assertEqual("POST", self.force_post.get_method()) def test_data(self): self.assertFalse(self.get.data) diff -r aea58e1cae75 -r 061eb75339e2 Lib/urllib/request.py --- a/Lib/urllib/request.py Sun Sep 08 14:14:38 2013 +0200 +++ b/Lib/urllib/request.py Sun Sep 08 13:03:40 2013 -0400 @@ -271,7 +271,8 @@ origin_req_host = request_host(self) self.origin_req_host = origin_req_host self.unverifiable = unverifiable - self.method = method + if method: + self.method = method @property def full_url(self): @@ -320,12 +321,8 @@ def get_method(self): """Return a string indicating the HTTP request method.""" - if self.method is not None: - return self.method - elif self.data is not None: - return "POST" - else: - return "GET" + default_method = "POST" if self.data is not None else "GET" + return getattr(self, 'method', default_method) def get_full_url(self): return self.full_url