summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorSenthil Kumaran <orsenthil@gmail.com>2010-04-15 17:21:29 (GMT)
committerSenthil Kumaran <orsenthil@gmail.com>2010-04-15 17:21:29 (GMT)
commit0e3e48545295d23e2dae081a01b6e62fb2dfe65a (patch)
tree6ce966b4d3747114f63e72be97b4f0013eafa2d8 /Doc
parent84ee3103a3d0fd5a56a8d33ddacacafe858d0e1c (diff)
downloadcpython-0e3e48545295d23e2dae081a01b6e62fb2dfe65a.zip
cpython-0e3e48545295d23e2dae081a01b6e62fb2dfe65a.tar.gz
cpython-0e3e48545295d23e2dae081a01b6e62fb2dfe65a.tar.bz2
Merged revisions 80092 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r80092 | senthil.kumaran | 2010-04-15 22:48:22 +0530 (Thu, 15 Apr 2010) | 2 lines Fix Issue5419 - explaining bytes return value of urlopen, use of .decode() to convert to str. ........
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/urllib.request.rst34
1 files changed, 25 insertions, 9 deletions
diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst
index f1fe42a..9496083 100644
--- a/Doc/library/urllib.request.rst
+++ b/Doc/library/urllib.request.rst
@@ -1073,23 +1073,39 @@ Examples
--------
This example gets the python.org main page and displays the first 100 bytes of
-it::
+it.::
>>> import urllib.request
>>> f = urllib.request.urlopen('http://www.python.org/')
>>> print(f.read(100))
+ b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+ <?xml-stylesheet href="./css/ht2html'
+
+Note that in Python 3, urlopen returns a bytes object by default. In many
+circumstances, you might expect the output of urlopen to be a string. This
+might be a carried over expectation from Python 2, where urlopen returned
+string or it might even the common usecase. In those cases, you should
+explicitly decode the bytes to string.
+
+In the examples below, we have chosen *utf-8* encoding for demonstration, you
+might choose the encoding which is suitable for the webpage you are
+requesting::
+
+ >>> import urllib.request
+ >>> f = urllib.request.urlopen('http://www.python.org/')
+ >>> print(f.read(100).decode('utf-8')
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?xml-stylesheet href="./css/ht2html
-Here we are sending a data-stream to the stdin of a CGI and reading the data it
-returns to us. Note that this example will only work when the Python
-installation supports SSL. ::
+In the following example, we are sending a data-stream to the stdin of a CGI
+and reading the data it returns to us. Note that this example will only work
+when the Python installation supports SSL. ::
>>> import urllib.request
>>> req = urllib.request.Request(url='https://localhost/cgi-bin/test.cgi',
... data='This data is passed to stdin of the CGI')
>>> f = urllib.request.urlopen(req)
- >>> print(f.read())
+ >>> print(f.read().decode('utf-8'))
Got Data: "This data is passed to stdin of the CGI"
The code for the sample CGI used in the above example is::
@@ -1161,7 +1177,7 @@ containing parameters::
>>> import urllib.parse
>>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.request.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)
- >>> print(f.read())
+ >>> print(f.read().decode('utf-8'))
The following example uses the ``POST`` method instead::
@@ -1169,7 +1185,7 @@ The following example uses the ``POST`` method instead::
>>> import urllib.parse
>>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.request.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
- >>> print(f.read())
+ >>> print(f.read().decode('utf-8'))
The following example uses an explicitly specified HTTP proxy, overriding
environment settings::
@@ -1178,14 +1194,14 @@ environment settings::
>>> proxies = {'http': 'http://proxy.example.com:8080/'}
>>> opener = urllib.request.FancyURLopener(proxies)
>>> f = opener.open("http://www.python.org")
- >>> f.read()
+ >>> f.read().decode('utf-8')
The following example uses no proxies at all, overriding environment settings::
>>> import urllib.request
>>> opener = urllib.request.FancyURLopener({})
>>> f = opener.open("http://www.python.org/")
- >>> f.read()
+ >>> f.read().decode('utf-8')
:mod:`urllib.request` Restrictions