diff --git a/src/requests/sessions.py b/src/requests/sessions.py index 731550de88..93a9f09929 100644 --- a/src/requests/sessions.py +++ b/src/requests/sessions.py @@ -482,7 +482,7 @@ def prepare_request(self, request): p = PreparedRequest() p.prepare( - method=request.method.upper(), + method=(request.method or "GET").upper(), url=request.url, files=request.files, data=request.data, diff --git a/tests/test_requests.py b/tests/test_requests.py index 75d2deff2e..9b4c411c8f 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1225,6 +1225,25 @@ def test_prepare_request_with_bytestring_url(self): prep = s.prepare_request(req) assert prep.url == "https://httpbin.org/" + def test_prepare_request_with_none_method(self): + """Test that prepare_request handles None method correctly. + + When Request.method is None, + prepare_request() should default to "GET" instead of crashing. + """ + # Create a Request without specifying method (defaults to None) + req = requests.Request(url="https://httpbin.org/") + assert req.method is None + + s = requests.Session() + + # After the fix, this should work and default to GET + prep = s.prepare_request(req) + + # Verify the method defaults to GET + assert prep.method == "GET" + assert prep.url == "https://httpbin.org/" + def test_request_with_bytestring_host(self, httpbin): s = requests.Session() resp = s.request(