diff --git a/webob/request.py b/webob/request.py
index 01c170f..8269ac5 100644
--- a/webob/request.py
+++ b/webob/request.py
@@ -785,8 +785,10 @@ class BaseRequest(object):
             return NoVars('Not an HTML form submission (Content-Type: %s)'
                           % content_type)
         self._check_charset()
-        if self.is_body_seekable:
-            self.body_file_raw.seek(0)
+
+        self.make_body_seekable()
+        self.body_file_raw.seek(0)
+
         fs_environ = env.copy()
         # FieldStorage assumes a missing CONTENT_LENGTH, but a
         # default of 0 is better:
@@ -806,11 +808,6 @@ class BaseRequest(object):
                 keep_blank_values=True)
             vars = MultiDict.from_fieldstorage(fs)
 
-
-        #ctype = self.content_type or 'application/x-www-form-urlencoded'
-        ctype = self._content_type_raw or 'application/x-www-form-urlencoded'
-        f = FakeCGIBody(vars, ctype)
-        self.body_file = io.BufferedReader(f)
         env['webob._parsed_post_vars'] = (vars, self.body_file_raw)
         return vars
 

Accessing request.POST modifyed body
I have a request which is POSTing JSON data, but some clients do not send along a `Content-Type` header. When this happens accessing `request.POST` will mangle the request body. Here is an example:

```python
(Pdb) p request.content_type
''
(Pdb) p request.body
'{"password": "last centurion", "email": "rory@wiggy.net"}'
(Pdb) p request.POST
MultiDict([('{"password": "last centurion", "email": "rory@wiggy.net"}', '******')])
(Pdb) p request.body
'%7B%22password%22%3A+%22last+centurion%22%2C+%22email%22%3A+%22rory%40wiggy.net%22%7D='
```

diff --git a/tests/test_request.py b/tests/test_request.py
index ebe5daf..f325bb9 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -512,6 +512,21 @@ class TestRequestCommon(unittest.TestCase):
         result = req.POST
         self.assertEqual(result['var1'], 'value1')
 
+    def test_POST_json_no_content_type(self):
+        data = b'{"password": "last centurion", "email": "rory@wiggy.net"}'
+        INPUT = BytesIO(data)
+        environ = {'wsgi.input': INPUT,
+                   'REQUEST_METHOD': 'POST',
+                   'CONTENT_LENGTH':len(data),
+                   'webob.is_body_seekable': True,
+                  }
+        req = self._makeOne(environ)
+        r_1 = req.body
+        r_2 = req.POST
+        r_3 = req.body
+        self.assertEqual(r_1, b'{"password": "last centurion", "email": "rory@wiggy.net"}')
+        self.assertEqual(r_3, b'{"password": "last centurion", "email": "rory@wiggy.net"}')
+
     def test_PUT_bad_content_type(self):
         from webob.multidict import NoVars
         data = b'input'
@@ -2980,14 +2995,10 @@ class TestRequest_functional(unittest.TestCase):
             content_type='multipart/form-data; boundary=boundary',
             POST=_cgi_escaping_body
         )
-        f0 = req.body_file_raw
         post1 = req.POST
-        f1 = req.body_file_raw
-        self.assertTrue(f1 is not f0)
+        self.assertTrue('webob._parsed_post_vars' in req.environ)
         post2 = req.POST
-        f2 = req.body_file_raw
         self.assertTrue(post1 is post2)
-        self.assertTrue(f1 is f2)
 
 
     def test_middleware_body(self):
@@ -3391,6 +3402,11 @@ class FakeCGIBodyTests(unittest.TestCase):
                            'application/x-www-form-urlencoded')
         self.assertEqual(body.read(), b'bananas=bananas')
 
+    def test_readable(self):
+        from webob.request import FakeCGIBody
+        body = FakeCGIBody({'bananas': 'bananas'}, 'application/something')
+        self.assertTrue(body.readable())
+
 
 class Test_cgi_FieldStorage__repr__patch(unittest.TestCase):
     def _callFUT(self, fake):

pip install -e .[dev]
parse_log_pytest
pytest
pytest
3.4
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
-e git+https://github.com/Pylons/webob.git@643ac0afc561165575a999d7458daa2bc5b0a2c1#egg=WebOb
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: webob
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
prefix: /opt/conda/envs/webob

tests/test_request.py::TestRequestCommon::test_POST_json_no_content_type
tests/test_request.py::TestRequestCommon::test_GET_reflects_query_string tests/test_request.py::TestRequestCommon::test_GET_updates_query_string tests/test_request.py::TestRequestCommon::test_POST_existing_cache_hit tests/test_request.py::TestRequestCommon::test_POST_missing_content_type tests/test_request.py::TestRequestCommon::test_POST_multipart tests/test_request.py::TestRequestCommon::test_POST_not_POST_or_PUT tests/test_request.py::TestRequestCommon::test_PUT_bad_content_type tests/test_request.py::TestRequestCommon::test_PUT_missing_content_type tests/test_request.py::TestRequestCommon::test__text_get_without_charset tests/test_request.py::TestRequestCommon::test__text_set_without_charset tests/test_request.py::TestRequestCommon::test_as_bytes_skip_body tests/test_request.py::TestRequestCommon::test_as_string_deprecated tests/test_request.py::TestRequestCommon::test_blank__ctype_as_kw tests/test_request.py::TestRequestCommon::test_blank__ctype_in_env tests/test_request.py::TestRequestCommon::test_blank__ctype_in_headers tests/test_request.py::TestRequestCommon::test_blank__method_subtitution tests/test_request.py::TestRequestCommon::test_blank__post_file_w_wrong_ctype tests/test_request.py::TestRequestCommon::test_blank__post_files tests/test_request.py::TestRequestCommon::test_blank__post_multipart tests/test_request.py::TestRequestCommon::test_blank__post_urlencoded tests/test_request.py::TestRequestCommon::test_blank__str_post_data_for_unsupported_ctype tests/test_request.py::TestRequestCommon::test_body_deleter_None tests/test_request.py::TestRequestCommon::test_body_file_deleter tests/test_request.py::TestRequestCommon::test_body_file_getter tests/test_request.py::TestRequestCommon::test_body_file_getter_cache tests/test_request.py::TestRequestCommon::test_body_file_getter_seekable tests/test_request.py::TestRequestCommon::test_body_file_getter_unreadable tests/test_request.py::TestRequestCommon::test_body_file_raw tests/test_request.py::TestRequestCommon::test_body_file_seekable_input_is_seekable tests/test_request.py::TestRequestCommon::test_body_file_seekable_input_not_seekable tests/test_request.py::TestRequestCommon::test_body_file_setter_non_bytes tests/test_request.py::TestRequestCommon::test_body_file_setter_w_bytes tests/test_request.py::TestRequestCommon::test_body_getter tests/test_request.py::TestRequestCommon::test_body_setter_None tests/test_request.py::TestRequestCommon::test_body_setter_non_string_raises tests/test_request.py::TestRequestCommon::test_body_setter_value tests/test_request.py::TestRequestCommon::test_cache_control_gets_cached tests/test_request.py::TestRequestCommon::test_cache_control_reflects_environ tests/test_request.py::TestRequestCommon::test_cache_control_set_dict tests/test_request.py::TestRequestCommon::test_cache_control_set_object tests/test_request.py::TestRequestCommon::test_cache_control_updates_environ tests/test_request.py::TestRequestCommon::test_call_application_calls_application tests/test_request.py::TestRequestCommon::test_call_application_closes_iterable_when_mixed_w_write_calls tests/test_request.py::TestRequestCommon::test_call_application_provides_write tests/test_request.py::TestRequestCommon::test_call_application_raises_exc_info tests/test_request.py::TestRequestCommon::test_call_application_returns_exc_info tests/test_request.py::TestRequestCommon::test_cookies_empty_environ tests/test_request.py::TestRequestCommon::test_cookies_is_mutable tests/test_request.py::TestRequestCommon::test_cookies_w_webob_parsed_cookies_matching_source tests/test_request.py::TestRequestCommon::test_cookies_w_webob_parsed_cookies_mismatched_source tests/test_request.py::TestRequestCommon::test_cookies_wo_webob_parsed_cookies tests/test_request.py::TestRequestCommon::test_copy_get tests/test_request.py::TestRequestCommon::test_ctor_environ_getter_raises_WTF tests/test_request.py::TestRequestCommon::test_ctor_w_environ tests/test_request.py::TestRequestCommon::test_ctor_w_non_utf8_charset tests/test_request.py::TestRequestCommon::test_ctor_wo_environ_raises_WTF tests/test_request.py::TestRequestCommon::test_from_bytes_extra_data tests/test_request.py::TestRequestCommon::test_from_string_deprecated tests/test_request.py::TestRequestCommon::test_is_body_readable_GET tests/test_request.py::TestRequestCommon::test_is_body_readable_PATCH tests/test_request.py::TestRequestCommon::test_is_body_readable_POST tests/test_request.py::TestRequestCommon::test_is_body_readable_special_flag tests/test_request.py::TestRequestCommon::test_is_body_readable_unknown_method_and_content_length tests/test_request.py::TestRequestCommon::test_json_body tests/test_request.py::TestRequestCommon::test_json_body_array tests/test_request.py::TestRequestCommon::test_remove_conditional_headers_accept_encoding tests/test_request.py::TestRequestCommon::test_remove_conditional_headers_if_modified_since tests/test_request.py::TestRequestCommon::test_remove_conditional_headers_if_none_match tests/test_request.py::TestRequestCommon::test_remove_conditional_headers_if_range tests/test_request.py::TestRequestCommon::test_remove_conditional_headers_range tests/test_request.py::TestRequestCommon::test_scheme tests/test_request.py::TestRequestCommon::test_set_cookies tests/test_request.py::TestRequestCommon::test_text_body tests/test_request.py::TestRequestCommon::test_urlargs_deleter_w_wsgiorg_key tests/test_request.py::TestRequestCommon::test_urlargs_deleter_w_wsgiorg_key_empty tests/test_request.py::TestRequestCommon::test_urlargs_deleter_wo_keys tests/test_request.py::TestRequestCommon::test_urlargs_getter_w_paste_key tests/test_request.py::TestRequestCommon::test_urlargs_getter_w_wsgiorg_key tests/test_request.py::TestRequestCommon::test_urlargs_getter_wo_keys tests/test_request.py::TestRequestCommon::test_urlargs_setter_w_paste_key tests/test_request.py::TestRequestCommon::test_urlargs_setter_w_wsgiorg_key tests/test_request.py::TestRequestCommon::test_urlargs_setter_wo_keys tests/test_request.py::TestRequestCommon::test_urlvars_deleter_w_paste_key tests/test_request.py::TestRequestCommon::test_urlvars_deleter_w_wsgiorg_key_empty_tuple tests/test_request.py::TestRequestCommon::test_urlvars_deleter_w_wsgiorg_key_non_empty_tuple tests/test_request.py::TestRequestCommon::test_urlvars_deleter_wo_keys tests/test_request.py::TestRequestCommon::test_urlvars_getter_w_paste_key tests/test_request.py::TestRequestCommon::test_urlvars_getter_w_wsgiorg_key tests/test_request.py::TestRequestCommon::test_urlvars_getter_wo_keys tests/test_request.py::TestRequestCommon::test_urlvars_setter_w_paste_key tests/test_request.py::TestRequestCommon::test_urlvars_setter_w_wsgiorg_key tests/test_request.py::TestRequestCommon::test_urlvars_setter_wo_keys tests/test_request.py::TestBaseRequest::test_application_url tests/test_request.py::TestBaseRequest::test_client_addr_no_xff tests/test_request.py::TestBaseRequest::test_client_addr_no_xff_no_remote_addr tests/test_request.py::TestBaseRequest::test_client_addr_prefers_xff tests/test_request.py::TestBaseRequest::test_client_addr_xff_multival tests/test_request.py::TestBaseRequest::test_client_addr_xff_singleval tests/test_request.py::TestBaseRequest::test_content_length_getter tests/test_request.py::TestBaseRequest::test_content_length_setter_w_str tests/test_request.py::TestBaseRequest::test_content_type_deleter_clears_environ_value tests/test_request.py::TestBaseRequest::test_content_type_deleter_no_environ_value tests/test_request.py::TestBaseRequest::test_content_type_getter_no_parameters tests/test_request.py::TestBaseRequest::test_content_type_getter_w_parameters tests/test_request.py::TestBaseRequest::test_content_type_setter_existing_paramter_no_new_paramter tests/test_request.py::TestBaseRequest::test_content_type_setter_w_None tests/test_request.py::TestBaseRequest::test_domain_nocolon tests/test_request.py::TestBaseRequest::test_domain_withcolon tests/test_request.py::TestBaseRequest::test_encget_doesnt_raises_with_default tests/test_request.py::TestBaseRequest::test_encget_no_encattr tests/test_request.py::TestBaseRequest::test_encget_raises_without_default tests/test_request.py::TestBaseRequest::test_encget_with_encattr tests/test_request.py::TestBaseRequest::test_encget_with_encattr_latin_1 tests/test_request.py::TestBaseRequest::test_header_getter tests/test_request.py::TestBaseRequest::test_headers_getter tests/test_request.py::TestBaseRequest::test_headers_setter tests/test_request.py::TestBaseRequest::test_host_deleter_hit tests/test_request.py::TestBaseRequest::test_host_deleter_miss tests/test_request.py::TestBaseRequest::test_host_get tests/test_request.py::TestBaseRequest::test_host_get_w_no_http_host tests/test_request.py::TestBaseRequest::test_host_getter_w_HTTP_HOST tests/test_request.py::TestBaseRequest::test_host_getter_wo_HTTP_HOST tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_and_no_port tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_and_oddball_port tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_and_standard_port tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_https_and_no_port tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_https_and_oddball_port tests/test_request.py::TestBaseRequest::test_host_port_w_http_host_https_and_standard_port tests/test_request.py::TestBaseRequest::test_host_port_wo_http_host tests/test_request.py::TestBaseRequest::test_host_setter tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_and_no_port tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_and_oddball_port tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_and_standard_port tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_https_and_no_port tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_https_and_oddball_port tests/test_request.py::TestBaseRequest::test_host_url_w_http_host_https_and_standard_port tests/test_request.py::TestBaseRequest::test_host_url_wo_http_host tests/test_request.py::TestBaseRequest::test_http_version tests/test_request.py::TestBaseRequest::test_is_xhr_header_hit tests/test_request.py::TestBaseRequest::test_is_xhr_header_miss tests/test_request.py::TestBaseRequest::test_is_xhr_no_header tests/test_request.py::TestBaseRequest::test_json_body tests/test_request.py::TestBaseRequest::test_method tests/test_request.py::TestBaseRequest::test_no_headers_deleter tests/test_request.py::TestBaseRequest::test_path tests/test_request.py::TestBaseRequest::test_path_info tests/test_request.py::TestBaseRequest::test_path_info_peek_empty tests/test_request.py::TestBaseRequest::test_path_info_peek_just_leading_slash tests/test_request.py::TestBaseRequest::test_path_info_peek_non_empty tests/test_request.py::TestBaseRequest::test_path_info_pop_empty tests/test_request.py::TestBaseRequest::test_path_info_pop_just_leading_slash tests/test_request.py::TestBaseRequest::test_path_info_pop_non_empty_no_pattern tests/test_request.py::TestBaseRequest::test_path_info_pop_non_empty_w_pattern_hit tests/test_request.py::TestBaseRequest::test_path_info_pop_non_empty_w_pattern_miss tests/test_request.py::TestBaseRequest::test_path_info_pop_skips_empty_elements tests/test_request.py::TestBaseRequest::test_path_qs_no_qs tests/test_request.py::TestBaseRequest::test_path_qs_w_qs tests/test_request.py::TestBaseRequest::test_path_url tests/test_request.py::TestBaseRequest::test_query_string tests/test_request.py::TestBaseRequest::test_relative_url tests/test_request.py::TestBaseRequest::test_relative_url_to_app_false_other_w_leading_slash tests/test_request.py::TestBaseRequest::test_relative_url_to_app_false_other_wo_leading_slash tests/test_request.py::TestBaseRequest::test_relative_url_to_app_true_w_leading_slash tests/test_request.py::TestBaseRequest::test_relative_url_to_app_true_wo_leading_slash tests/test_request.py::TestBaseRequest::test_remote_addr tests/test_request.py::TestBaseRequest::test_remote_user tests/test_request.py::TestBaseRequest::test_script_name tests/test_request.py::TestBaseRequest::test_server_name tests/test_request.py::TestBaseRequest::test_server_port_getter tests/test_request.py::TestBaseRequest::test_server_port_setter_with_string tests/test_request.py::TestBaseRequest::test_upath_info tests/test_request.py::TestBaseRequest::test_upath_info_set_unicode tests/test_request.py::TestBaseRequest::test_url_no_qs tests/test_request.py::TestBaseRequest::test_url_w_qs tests/test_request.py::TestBaseRequest::test_uscript_name tests/test_request.py::TestLegacyRequest::test_application_url tests/test_request.py::TestLegacyRequest::test_client_addr_no_xff tests/test_request.py::TestLegacyRequest::test_client_addr_no_xff_no_remote_addr tests/test_request.py::TestLegacyRequest::test_client_addr_prefers_xff tests/test_request.py::TestLegacyRequest::test_client_addr_xff_multival tests/test_request.py::TestLegacyRequest::test_client_addr_xff_singleval tests/test_request.py::TestLegacyRequest::test_content_length_getter tests/test_request.py::TestLegacyRequest::test_content_length_setter_w_str tests/test_request.py::TestLegacyRequest::test_content_type_deleter_clears_environ_value tests/test_request.py::TestLegacyRequest::test_content_type_deleter_no_environ_value tests/test_request.py::TestLegacyRequest::test_content_type_getter_no_parameters tests/test_request.py::TestLegacyRequest::test_content_type_getter_w_parameters tests/test_request.py::TestLegacyRequest::test_content_type_setter_existing_paramter_no_new_paramter tests/test_request.py::TestLegacyRequest::test_content_type_setter_w_None tests/test_request.py::TestLegacyRequest::test_encget_doesnt_raises_with_default tests/test_request.py::TestLegacyRequest::test_encget_no_encattr tests/test_request.py::TestLegacyRequest::test_encget_raises_without_default tests/test_request.py::TestLegacyRequest::test_encget_with_encattr tests/test_request.py::TestLegacyRequest::test_header_getter tests/test_request.py::TestLegacyRequest::test_headers_getter tests/test_request.py::TestLegacyRequest::test_headers_setter tests/test_request.py::TestLegacyRequest::test_host_deleter_hit tests/test_request.py::TestLegacyRequest::test_host_deleter_miss tests/test_request.py::TestLegacyRequest::test_host_get_w_http_host tests/test_request.py::TestLegacyRequest::test_host_get_w_no_http_host tests/test_request.py::TestLegacyRequest::test_host_getter_w_HTTP_HOST tests/test_request.py::TestLegacyRequest::test_host_getter_wo_HTTP_HOST tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_and_no_port tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_and_oddball_port tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_and_standard_port tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_https_and_no_port tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_https_and_oddball_port tests/test_request.py::TestLegacyRequest::test_host_port_w_http_host_https_and_standard_port tests/test_request.py::TestLegacyRequest::test_host_port_wo_http_host tests/test_request.py::TestLegacyRequest::test_host_setter tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_and_no_port tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_and_oddball_port tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_and_standard_port tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_https_and_no_port tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_https_and_oddball_port tests/test_request.py::TestLegacyRequest::test_host_url_w_http_host_https_and_standard_port tests/test_request.py::TestLegacyRequest::test_host_url_wo_http_host tests/test_request.py::TestLegacyRequest::test_http_version tests/test_request.py::TestLegacyRequest::test_is_xhr_header_hit tests/test_request.py::TestLegacyRequest::test_is_xhr_header_miss tests/test_request.py::TestLegacyRequest::test_is_xhr_no_header tests/test_request.py::TestLegacyRequest::test_json_body tests/test_request.py::TestLegacyRequest::test_method tests/test_request.py::TestLegacyRequest::test_no_headers_deleter tests/test_request.py::TestLegacyRequest::test_path tests/test_request.py::TestLegacyRequest::test_path_info tests/test_request.py::TestLegacyRequest::test_path_info_peek_empty tests/test_request.py::TestLegacyRequest::test_path_info_peek_just_leading_slash tests/test_request.py::TestLegacyRequest::test_path_info_peek_non_empty tests/test_request.py::TestLegacyRequest::test_path_info_pop_empty tests/test_request.py::TestLegacyRequest::test_path_info_pop_just_leading_slash tests/test_request.py::TestLegacyRequest::test_path_info_pop_non_empty_no_pattern tests/test_request.py::TestLegacyRequest::test_path_info_pop_non_empty_w_pattern_hit tests/test_request.py::TestLegacyRequest::test_path_info_pop_non_empty_w_pattern_miss tests/test_request.py::TestLegacyRequest::test_path_info_pop_skips_empty_elements tests/test_request.py::TestLegacyRequest::test_path_qs_no_qs tests/test_request.py::TestLegacyRequest::test_path_qs_w_qs tests/test_request.py::TestLegacyRequest::test_path_url tests/test_request.py::TestLegacyRequest::test_query_string tests/test_request.py::TestLegacyRequest::test_relative_url tests/test_request.py::TestLegacyRequest::test_relative_url_to_app_false_other_w_leading_slash tests/test_request.py::TestLegacyRequest::test_relative_url_to_app_false_other_wo_leading_slash tests/test_request.py::TestLegacyRequest::test_relative_url_to_app_true_w_leading_slash tests/test_request.py::TestLegacyRequest::test_relative_url_to_app_true_wo_leading_slash tests/test_request.py::TestLegacyRequest::test_remote_addr tests/test_request.py::TestLegacyRequest::test_remote_user tests/test_request.py::TestLegacyRequest::test_script_name tests/test_request.py::TestLegacyRequest::test_server_name tests/test_request.py::TestLegacyRequest::test_server_port_getter tests/test_request.py::TestLegacyRequest::test_server_port_setter_with_string tests/test_request.py::TestLegacyRequest::test_upath_info tests/test_request.py::TestLegacyRequest::test_upath_info_set_unicode tests/test_request.py::TestLegacyRequest::test_url_no_qs tests/test_request.py::TestLegacyRequest::test_url_w_qs tests/test_request.py::TestLegacyRequest::test_uscript_name tests/test_request.py::TestRequestConstructorWarnings::test_ctor_w_decode_param_names tests/test_request.py::TestRequestConstructorWarnings::test_ctor_w_unicode_errors tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_del tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_del_missing tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_get tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_get_missing tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_set tests/test_request.py::TestRequestWithAdhocAttr::test_adhoc_attrs_set_nonadhoc tests/test_request.py::TestRequest_functional::test_accept_best_match tests/test_request.py::TestRequest_functional::test_as_bytes tests/test_request.py::TestRequest_functional::test_as_text tests/test_request.py::TestRequest_functional::test_authorization tests/test_request.py::TestRequest_functional::test_bad_cookie tests/test_request.py::TestRequest_functional::test_blank tests/test_request.py::TestRequest_functional::test_body_file_noseek tests/test_request.py::TestRequest_functional::test_body_file_seekable tests/test_request.py::TestRequest_functional::test_body_property tests/test_request.py::TestRequest_functional::test_broken_clen_header tests/test_request.py::TestRequest_functional::test_broken_seek tests/test_request.py::TestRequest_functional::test_call_WSGI_app tests/test_request.py::TestRequest_functional::test_cgi_escaping_fix tests/test_request.py::TestRequest_functional::test_content_type_none tests/test_request.py::TestRequest_functional::test_conttype_set_del tests/test_request.py::TestRequest_functional::test_cookie_quoting tests/test_request.py::TestRequest_functional::test_copy_body tests/test_request.py::TestRequest_functional::test_env_keys tests/test_request.py::TestRequest_functional::test_from_bytes tests/test_request.py::TestRequest_functional::test_from_file_patch tests/test_request.py::TestRequest_functional::test_from_garbage_file tests/test_request.py::TestRequest_functional::test_from_mimeparse tests/test_request.py::TestRequest_functional::test_from_text tests/test_request.py::TestRequest_functional::test_get_response_catch_exc_info_true tests/test_request.py::TestRequest_functional::test_gets tests/test_request.py::TestRequest_functional::test_gets_with_query_string tests/test_request.py::TestRequest_functional::test_headers tests/test_request.py::TestRequest_functional::test_headers2 tests/test_request.py::TestRequest_functional::test_host_property tests/test_request.py::TestRequest_functional::test_host_url tests/test_request.py::TestRequest_functional::test_language_parsing1 tests/test_request.py::TestRequest_functional::test_language_parsing2 tests/test_request.py::TestRequest_functional::test_language_parsing3 tests/test_request.py::TestRequest_functional::test_middleware_body tests/test_request.py::TestRequest_functional::test_mime_parsing1 tests/test_request.py::TestRequest_functional::test_mime_parsing2 tests/test_request.py::TestRequest_functional::test_mime_parsing3 tests/test_request.py::TestRequest_functional::test_nonstr_keys tests/test_request.py::TestRequest_functional::test_params tests/test_request.py::TestRequest_functional::test_path_info_p tests/test_request.py::TestRequest_functional::test_path_quoting tests/test_request.py::TestRequest_functional::test_post_does_not_reparse tests/test_request.py::TestRequest_functional::test_repr_invalid tests/test_request.py::TestRequest_functional::test_repr_nodefault tests/test_request.py::TestRequest_functional::test_req_kw_none_val tests/test_request.py::TestRequest_functional::test_request_init tests/test_request.py::TestRequest_functional::test_request_noenviron_param tests/test_request.py::TestRequest_functional::test_request_patch tests/test_request.py::TestRequest_functional::test_request_put tests/test_request.py::TestRequest_functional::test_request_query_and_POST_vars tests/test_request.py::TestRequest_functional::test_set_body tests/test_request.py::TestRequest_functional::test_unexpected_kw tests/test_request.py::TestRequest_functional::test_urlargs_property tests/test_request.py::TestRequest_functional::test_urlvars_property tests/test_request.py::FakeCGIBodyTests::test_encode_multipart_no_boundary tests/test_request.py::FakeCGIBodyTests::test_encode_multipart_value_type_options tests/test_request.py::FakeCGIBodyTests::test_fileno tests/test_request.py::FakeCGIBodyTests::test_iter tests/test_request.py::FakeCGIBodyTests::test_read_bad_content_type tests/test_request.py::FakeCGIBodyTests::test_read_urlencoded tests/test_request.py::FakeCGIBodyTests::test_readable tests/test_request.py::FakeCGIBodyTests::test_readline tests/test_request.py::FakeCGIBodyTests::test_repr tests/test_request.py::Test_cgi_FieldStorage__repr__patch::test_with_file tests/test_request.py::Test_cgi_FieldStorage__repr__patch::test_without_file tests/test_request.py::TestLimitedLengthFile::test_fileno tests/test_request.py::Test_environ_from_url::test_environ_from_url tests/test_request.py::Test_environ_from_url::test_environ_from_url_highorder_path_info tests/test_request.py::Test_environ_from_url::test_fileupload_mime_type_detection tests/test_request.py::TestRequestMultipart::test_multipart_with_charset
webob/request.py
webob/request.py