Fix `_encode_files` detection for `__getattr__`-based file wrappers (#7502)
diff --git a/src/requests/models.py b/src/requests/models.py
index c4cc028..ebeba1e 100644
--- a/src/requests/models.py
+++ b/src/requests/models.py
@@ -236,7 +236,9 @@
 
             if isinstance(fp, (str, bytes, bytearray)):
                 fdata = fp
-            elif isinstance(fp, _SupportsRead):  # defensive check for untyped callers
+            # data that proxies attributes to underlying objects needs hasattr
+            # defensive check for untyped callers
+            elif isinstance(fp, _SupportsRead) or hasattr(fp, "read"):
                 fdata = fp.read()
             elif fp is None:  # defensive check for untyped callers
                 continue
diff --git a/tests/test_requests.py b/tests/test_requests.py
index 571535f..2cea2fe 100644
--- a/tests/test_requests.py
+++ b/tests/test_requests.py
@@ -1087,6 +1087,17 @@
             )
         assert r.status_code == 200
 
+    def test_post_named_tempfile(self, httpbin):
+        with tempfile.NamedTemporaryFile(mode="w+") as f:
+            f.write("named temp file contents\n")
+            f.seek(0)
+            r = requests.post(
+                httpbin("post"),
+                files={"file": f},
+            )
+        assert r.status_code == 200
+        assert r.json()["files"]["file"] == "named temp file contents\n"
+
     @pytest.mark.parametrize(
         "data",
         (