Clean up urlopen doc string.

Clarifies what is returned when and that the methods are common between the two.

Patch by Alexander Liu as part of #22797.
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index 4a3daec..333c3f2 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -173,12 +173,7 @@
     The *cadefault* parameter is ignored.
 
     For http and https urls, this function returns a http.client.HTTPResponse
-    object which has the following HTTPResponse Objects methods.
-
-    For ftp, file, and data urls and requests explicitly handled by legacy
-    URLopener and FancyURLopener classes, this function returns a
-    urllib.response.addinfourl object which can work as context manager and has
-    methods such as:
+    object which has the following HTTPResponse Objects methods:
 
     * geturl() - return the URL of the resource retrieved, commonly used to
       determine if a redirect was followed
@@ -190,6 +185,11 @@
     * getcode() - return the HTTP status code of the response.  Raises URLError
       on errors.
 
+    For ftp, file, and data urls and requests explicitly handled by legacy
+    URLopener and FancyURLopener classes, this function returns a
+    urllib.response.addinfourl object which can work as context manager and
+    also support the geturl(), info(), getcode() methods listed above.
+
     Note that *None& may be returned if no handler handles the request (though
     the default installed global OpenerDirector uses UnknownHandler to ensure
     this never happens).
diff --git a/Misc/ACKS b/Misc/ACKS
index 8437805..ee67e27 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -884,6 +884,7 @@
 Gregor Lingl
 Everett Lipman
 Mirko Liss
+Alexander Liu
 Nick Lockwood
 Stephanie Lockwood
 Martin von Löwis