/usr/share/doc/python2-docs/html/_sources/library
NameSizeModeActions
2to3.rst.txt146470644editdlrm
abc.rst.txt72190644editdlrm
aepack.rst.txt42570644editdlrm
aetools.rst.txt35320644editdlrm
aetypes.rst.txt42570644editdlrm
aifc.rst.txt70860644editdlrm
al.rst.txt53090644editdlrm
allos.rst.txt6950644editdlrm
anydbm.rst.txt41110644editdlrm
archiving.rst.txt4240644editdlrm
argparse.rst.txt746850644editdlrm
array.rst.txt105240644editdlrm
ast.rst.txt101110644editdlrm
asynchat.rst.txt92060644editdlrm
asyncore.rst.txt129370644editdlrm
atexit.rst.txt39100644editdlrm
audioop.rst.txt103950644editdlrm
autogil.rst.txt10150644editdlrm
base64.rst.txt62520644editdlrm
basehttpserver.rst.txt104040644editdlrm
bastion.rst.txt26110644editdlrm
bdb.rst.txt124560644editdlrm
binascii.rst.txt65080644editdlrm
binhex.rst.txt19100644editdlrm
bisect.rst.txt54150644editdlrm
bsddb.rst.txt75750644editdlrm
bz2.rst.txt80640644editdlrm
calendar.rst.txt112820644editdlrm
carbon.rst.txt159560644editdlrm
cd.rst.txt119740644editdlrm
cgi.rst.txt228530644editdlrm
cgihttpserver.rst.txt27880644editdlrm
cgitb.rst.txt28740644editdlrm
chunk.rst.txt49550644editdlrm
cmath.rst.txt76470644editdlrm
cmd.rst.txt85650644editdlrm
code.rst.txt71150644editdlrm
codecs.rst.txt669660644editdlrm
codeop.rst.txt37740644editdlrm
collections.rst.txt414480644editdlrm
colorpicker.rst.txt9130644editdlrm
colorsys.rst.txt18190644editdlrm
commands.rst.txt25950644editdlrm
compileall.rst.txt46780644editdlrm
compiler.rst.txt374640644editdlrm
configparser.rst.txt196070644editdlrm
constants.rst.txt23280644editdlrm
contextlib.rst.txt60120644editdlrm
cookie.rst.txt95430644editdlrm
cookielib.rst.txt278750644editdlrm
copy.rst.txt33510644editdlrm
copy_reg.rst.txt23290644editdlrm
crypt.rst.txt22920644editdlrm
crypto.rst.txt3550644editdlrm
csv.rst.txt227570644editdlrm
ctypes.rst.txt905130644editdlrm
curses.ascii.rst.txt90460644editdlrm
curses.panel.rst.txt27400644editdlrm
curses.rst.txt748770644editdlrm
custominterp.rst.txt5700644editdlrm
datatypes.rst.txt8640644editdlrm
datetime.rst.txt746790644editdlrm
dbhash.rst.txt38650644editdlrm
dbm.rst.txt31170644editdlrm
debug.rst.txt4460644editdlrm
decimal.rst.txt709260644editdlrm
development.rst.txt6400644editdlrm
difflib.rst.txt307160644editdlrm
dircache.rst.txt18130644editdlrm
dis.rst.txt232480644editdlrm
distribution.rst.txt4260644editdlrm
distutils.rst.txt19580644editdlrm
dl.rst.txt33920644editdlrm
doctest.rst.txt739850644editdlrm
docxmlrpcserver.rst.txt38020644editdlrm
dumbdbm.rst.txt28410644editdlrm
dummy_thread.rst.txt10580644editdlrm
dummy_threading.rst.txt7990644editdlrm
easydialogs.rst.txt103460644editdlrm
email-examples.rst.txt12710644editdlrm
email.charset.rst.txt96540644editdlrm
email.encoders.rst.txt23760644editdlrm
email.errors.rst.txt40060644editdlrm
email.generator.rst.txt61320644editdlrm
email.header.rst.txt75310644editdlrm
email.iterators.rst.txt24210644editdlrm
email.message.rst.txt252170644editdlrm
email.mime.rst.txt99170644editdlrm
email.parser.rst.txt103270644editdlrm
email.rst.txt161110644editdlrm
email.utils.rst.txt64750644editdlrm
ensurepip.rst.txt50220644editdlrm
errno.rst.txt67080644editdlrm
exceptions.rst.txt183430644editdlrm
fcntl.rst.txt73610644editdlrm
filecmp.rst.txt53480644editdlrm
fileformats.rst.txt3020644editdlrm
fileinput.rst.txt74170644editdlrm
filesys.rst.txt8060644editdlrm
fl.rst.txt176460644editdlrm
fm.rst.txt26990644editdlrm
fnmatch.rst.txt31040644editdlrm
formatter.rst.txt132450644editdlrm
fpectl.rst.txt41710644editdlrm
fpformat.rst.txt17470644editdlrm
fractions.rst.txt52970644editdlrm
framework.rst.txt114440644editdlrm
frameworks.rst.txt3780644editdlrm
ftplib.rst.txt157200644editdlrm
functions.rst.txt755540644editdlrm
functools.rst.txt74480644editdlrm
future_builtins.rst.txt20100644editdlrm
gc.rst.txt90140644editdlrm
gdbm.rst.txt48820644editdlrm
gensuitemodule.rst.txt31130644editdlrm
getopt.rst.txt66700644editdlrm
getpass.rst.txt18760644editdlrm
gettext.rst.txt290400644editdlrm
gl.rst.txt60090644editdlrm
glob.rst.txt24140644editdlrm
grp.rst.txt22560644editdlrm
gzip.rst.txt48280644editdlrm
hashlib.rst.txt73790644editdlrm
heapq.rst.txt131850644editdlrm
hmac.rst.txt30730644editdlrm
hotshot.rst.txt42890644editdlrm
htmllib.rst.txt73790644editdlrm
htmlparser.rst.txt116400644editdlrm
httplib.rst.txt374540644editdlrm
i18n.rst.txt4090644editdlrm
ic.rst.txt50050644editdlrm
idle.rst.txt221820644editdlrm
imageop.rst.txt40010644editdlrm
imaplib.rst.txt172210644editdlrm
imgfile.rst.txt27650644editdlrm
imghdr.rst.txt26350644editdlrm
imp.rst.txt125930644editdlrm
importlib.rst.txt11260644editdlrm
imputil.rst.txt70230644editdlrm
index.rst.txt22870644editdlrm
inspect.rst.txt281510644editdlrm
internet.rst.txt9500644editdlrm
intro.rst.txt28030644editdlrm
io.rst.txt390150644editdlrm
ipc.rst.txt6300644editdlrm
itertools.rst.txt363240644editdlrm
jpeg.rst.txt38580644editdlrm
json.rst.txt255450644editdlrm
keyword.rst.txt6170644editdlrm
language.rst.txt5230644editdlrm
linecache.rst.txt18870644editdlrm
locale.rst.txt249750644editdlrm
logging.config.rst.txt315600644editdlrm
logging.handlers.rst.txt281530644editdlrm
logging.rst.txt468820644editdlrm
mac.rst.txt7910644editdlrm
macos.rst.txt38240644editdlrm
macosa.rst.txt39640644editdlrm
macostools.rst.txt40170644editdlrm
macpath.rst.txt6500644editdlrm
mailbox.rst.txt681290644editdlrm
mailcap.rst.txt36750644editdlrm
markup.rst.txt12490644editdlrm
marshal.rst.txt56890644editdlrm
math.rst.txt109200644editdlrm
md5.rst.txt28150644editdlrm
mhlib.rst.txt39660644editdlrm
mimetools.rst.txt45040644editdlrm
mimetypes.rst.txt98390644editdlrm
mimewriter.rst.txt33600644editdlrm
mimify.rst.txt35190644editdlrm
miniaeframe.rst.txt25640644editdlrm
misc.rst.txt2480644editdlrm
mm.rst.txt4470644editdlrm
mmap.rst.txt104810644editdlrm
modulefinder.rst.txt33800644editdlrm
modules.rst.txt3820644editdlrm
msilib.rst.txt190620644editdlrm
msvcrt.rst.txt43460644editdlrm
multifile.rst.txt66130644editdlrm
multiprocessing.rst.txt926210644editdlrm
mutex.rst.txt19390644editdlrm
netdata.rst.txt4320644editdlrm
netrc.rst.txt31190644editdlrm
new.rst.txt26530644editdlrm
nis.rst.txt21080644editdlrm
nntplib.rst.txt145310644editdlrm
numbers.rst.txt80070644editdlrm
numeric.rst.txt7510644editdlrm
operator.rst.txt220920644editdlrm
optparse.rst.txt771010644editdlrm
os.path.rst.txt130940644editdlrm
os.rst.txt825800644editdlrm
ossaudiodev.rst.txt173090644editdlrm
othergui.rst.txt27210644editdlrm
parser.rst.txt153850644editdlrm
pdb.rst.txt160430644editdlrm
persistence.rst.txt8260644editdlrm
pickle.rst.txt372620644editdlrm
pickletools.rst.txt19970644editdlrm
pipes.rst.txt37860644editdlrm
pkgutil.rst.txt77140644editdlrm
platform.rst.txt95540644editdlrm
plistlib.rst.txt41340644editdlrm
popen2.rst.txt70220644editdlrm
poplib.rst.txt62200644editdlrm
posix.rst.txt36300644editdlrm
posixfile.rst.txt72000644editdlrm
pprint.rst.txt90710644editdlrm
profile.rst.txt286660644editdlrm
pty.rst.txt17620644editdlrm
pwd.rst.txt27250644editdlrm
pyclbr.rst.txt32960644editdlrm
pydoc.rst.txt40830644editdlrm
pyexpat.rst.txt288910644editdlrm
python.rst.txt5140644editdlrm
py_compile.rst.txt24790644editdlrm
queue.rst.txt70340644editdlrm
quopri.rst.txt26700644editdlrm
random.rst.txt133190644editdlrm
re.rst.txt551020644editdlrm
readline.rst.txt105130644editdlrm
repr.rst.txt47180644editdlrm
resource.rst.txt95950644editdlrm
restricted.rst.txt33270644editdlrm
rexec.rst.txt117420644editdlrm
rfc822.rst.txt140370644editdlrm
rlcompleter.rst.txt24940644editdlrm
robotparser.rst.txt21900644editdlrm
runpy.rst.txt69380644editdlrm
sched.rst.txt46440644editdlrm
scrolledtext.rst.txt13790644editdlrm
select.rst.txt207050644editdlrm
sets.rst.txt149730644editdlrm
sgi.rst.txt3220644editdlrm
sgmllib.rst.txt106640644editdlrm
sha.rst.txt28070644editdlrm
shelve.rst.txt83190644editdlrm
shlex.rst.txt113130644editdlrm
shutil.rst.txt134910644editdlrm
signal.rst.txt107190644editdlrm
simplehttpserver.rst.txt45590644editdlrm
simplexmlrpcserver.rst.txt108810644editdlrm
site.rst.txt78800644editdlrm
smtpd.rst.txt24640644editdlrm
smtplib.rst.txt149060644editdlrm
sndhdr.rst.txt17590644editdlrm
socket.rst.txt407650644editdlrm
socketserver.rst.txt225120644editdlrm
someos.rst.txt5990644editdlrm
spwd.rst.txt28250644editdlrm
sqlite3.rst.txt354480644editdlrm
ssl.rst.txt765540644editdlrm
stat.rst.txt77780644editdlrm
statvfs.rst.txt13000644editdlrm
stdtypes.rst.txt1226680644editdlrm
string.rst.txt440850644editdlrm
stringio.rst.txt41660644editdlrm
stringprep.rst.txt42380644editdlrm
strings.rst.txt7460644editdlrm
struct.rst.txt171000644editdlrm
subprocess.rst.txt336480644editdlrm
sun.rst.txt2490644editdlrm
sunau.rst.txt71240644editdlrm
sunaudio.rst.txt58490644editdlrm
symbol.rst.txt9750644editdlrm
symtable.rst.txt50640644editdlrm
sys.rst.txt475200644editdlrm
sysconfig.rst.txt76390644editdlrm
syslog.rst.txt39310644editdlrm
tabnanny.rst.txt19990644editdlrm
tarfile.rst.txt282140644editdlrm
telnetlib.rst.txt74820644editdlrm
tempfile.rst.txt105040644editdlrm
termios.rst.txt37330644editdlrm
test.rst.txt176590644editdlrm
textwrap.rst.txt85520644editdlrm
thread.rst.txt65880644editdlrm
threading.rst.txt324680644editdlrm
time.rst.txt260200644editdlrm
timeit.rst.txt115980644editdlrm
tix.rst.txt226930644editdlrm
tk.rst.txt16120644editdlrm
tkinter.rst.txt334560644editdlrm
token.rst.txt24510644editdlrm
tokenize.rst.txt55700644editdlrm
trace.rst.txt67240644editdlrm
traceback.rst.txt107110644editdlrm
ttk.rst.txt574110644editdlrm
tty.rst.txt10110644editdlrm
turtle.rst.txt640970644editdlrm
types.rst.txt62000644editdlrm
undoc.rst.txt65500644editdlrm
unicodedata.rst.txt57360644editdlrm
unittest.rst.txt829520644editdlrm
unix.rst.txt4900644editdlrm
urllib.rst.txt249600644editdlrm
urllib2.rst.txt352110644editdlrm
urlparse.rst.txt160710644editdlrm
user.rst.txt27480644editdlrm
userdict.rst.txt92900644editdlrm
uu.rst.txt23690644editdlrm
uuid.rst.txt83780644editdlrm
warnings.rst.txt198150644editdlrm
wave.rst.txt50470644editdlrm
weakref.rst.txt129260644editdlrm
webbrowser.rst.txt98630644editdlrm
whichdb.rst.txt9310644editdlrm
windows.rst.txt2730644editdlrm
winsound.rst.txt50660644editdlrm
wsgiref.rst.txt305670644editdlrm
xdrlib.rst.txt80770644editdlrm
xml.dom.minidom.rst.txt112080644editdlrm
xml.dom.pulldom.rst.txt15710644editdlrm
xml.dom.rst.txt401820644editdlrm
xml.etree.elementtree.rst.txt357070644editdlrm
xml.rst.txt60900644editdlrm
xml.sax.handler.rst.txt153710644editdlrm
xml.sax.reader.rst.txt122570644editdlrm
xml.sax.rst.txt64600644editdlrm
xml.sax.utils.rst.txt35600644editdlrm
xmlrpclib.rst.txt225590644editdlrm
zipfile.rst.txt188710644editdlrm
zipimport.rst.txt59570644editdlrm
zlib.rst.txt127660644editdlrm
_winreg.rst.txt233050644editdlrm
__builtin__.rst.txt14940644editdlrm
__future__.rst.txt49520644editdlrm
__main__.rst.txt5350644editdlrm
Edit: /usr/share/doc/python2-docs/html/_sources/library/urllib.rst.txt (24960B)
:mod:`urllib` --- Open arbitrary resources by URL ================================================= .. module:: urllib :synopsis: Open an arbitrary network resource by URL (requires sockets). .. note:: The :mod:`urllib` module has been split into parts and renamed in Python 3 to :mod:`urllib.request`, :mod:`urllib.parse`, and :mod:`urllib.error`. The :term:`2to3` tool will automatically adapt imports when converting your sources to Python 3. Also note that the :func:`urllib.request.urlopen` function in Python 3 is equivalent to :func:`urllib2.urlopen` and that :func:`urllib.urlopen` has been removed. .. index:: single: WWW single: World Wide Web single: URL This module provides a high-level interface for fetching data across the World Wide Web. In particular, the :func:`urlopen` function is similar to the built-in function :func:`open`, but accepts Universal Resource Locators (URLs) instead of filenames. Some restrictions apply --- it can only open URLs for reading, and no seek operations are available. .. seealso:: The `Requests package `_ is recommended for a higher-level HTTP client interface. .. versionchanged:: 2.7.9 For HTTPS URIs, :mod:`urllib` performs all the neccessary certificate and hostname checks by default. .. warning:: For Python versions earlier than 2.7.9, urllib does not attempt to validate the server certificates of HTTPS URIs. Use at your own risk! High-level interface -------------------- .. function:: urlopen(url[, data[, proxies[, context]]]) Open a network object denoted by a URL for reading. If the URL does not have a scheme identifier, or if it has :file:`file:` as its scheme identifier, this opens a local file (without :term:`universal newlines`); otherwise it opens a socket to a server somewhere on the network. If the connection cannot be made the :exc:`IOError` exception is raised. If all went well, a file-like object is returned. This supports the following methods: :meth:`read`, :meth:`readline`, :meth:`readlines`, :meth:`fileno`, :meth:`close`, :meth:`info`, :meth:`getcode` and :meth:`geturl`. It also has proper support for the :term:`iterator` protocol. One caveat: the :meth:`read` method, if the size argument is omitted or negative, may not read until the end of the data stream; there is no good way to determine that the entire stream from a socket has been read in the general case. Except for the :meth:`info`, :meth:`getcode` and :meth:`geturl` methods, these methods have the same interface as for file objects --- see section :ref:`bltin-file-objects` in this manual. (It is not a built-in file object, however, so it can't be used at those few places where a true built-in file object is required.) .. index:: module: mimetools The :meth:`info` method returns an instance of the class :class:`mimetools.Message` containing meta-information associated with the URL. When the method is HTTP, these headers are those returned by the server at the head of the retrieved HTML page (including Content-Length and Content-Type). When the method is FTP, a Content-Length header will be present if (as is now usual) the server passed back a file length in response to the FTP retrieval request. A Content-Type header will be present if the MIME type can be guessed. When the method is local-file, returned headers will include a Date representing the file's last-modified time, a Content-Length giving file size, and a Content-Type containing a guess at the file's type. See also the description of the :mod:`mimetools` module. The :meth:`geturl` method returns the real URL of the page. In some cases, the HTTP server redirects a client to another URL. The :func:`urlopen` function handles this transparently, but in some cases the caller needs to know which URL the client was redirected to. The :meth:`geturl` method can be used to get at this redirected URL. The :meth:`getcode` method returns the HTTP status code that was sent with the response, or ``None`` if the URL is no HTTP URL. If the *url* uses the :file:`http:` scheme identifier, the optional *data* argument may be given to specify a ``POST`` request (normally the request type is ``GET``). The *data* argument must be in standard :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode` function below. The :func:`urlopen` function works transparently with proxies which do not require authentication. In a Unix or Windows environment, set the :envvar:`http_proxy`, or :envvar:`ftp_proxy` environment variables to a URL that identifies the proxy server before starting the Python interpreter. For example (the ``'%'`` is the command prompt):: % http_proxy="http://www.someproxy.com:3128" % export http_proxy % python ... The :envvar:`no_proxy` environment variable can be used to specify hosts which shouldn't be reached via proxy; if set, it should be a comma-separated list of hostname suffixes, optionally with ``:port`` appended, for example ``cern.ch,ncsa.uiuc.edu,some.host:8080``. In a Windows environment, if no proxy environment variables are set, proxy settings are obtained from the registry's Internet Settings section. .. index:: single: Internet Config In a Mac OS X environment, :func:`urlopen` will retrieve proxy information from the OS X System Configuration Framework, which can be managed with Network System Preferences panel. Alternatively, the optional *proxies* argument may be used to explicitly specify proxies. It must be a dictionary mapping scheme names to proxy URLs, where an empty dictionary causes no proxies to be used, and ``None`` (the default value) causes environmental proxy settings to be used as discussed above. For example:: # Use http://www.someproxy.com:3128 for HTTP proxying proxies = {'http': 'http://www.someproxy.com:3128'} filehandle = urllib.urlopen(some_url, proxies=proxies) # Don't use any proxies filehandle = urllib.urlopen(some_url, proxies={}) # Use proxies from environment - both versions are equivalent filehandle = urllib.urlopen(some_url, proxies=None) filehandle = urllib.urlopen(some_url) Proxies which require authentication for use are not currently supported; this is considered an implementation limitation. The *context* parameter may be set to a :class:`ssl.SSLContext` instance to configure the SSL settings that are used if :func:`urlopen` makes a HTTPS connection. .. versionchanged:: 2.3 Added the *proxies* support. .. versionchanged:: 2.6 Added :meth:`getcode` to returned object and support for the :envvar:`no_proxy` environment variable. .. versionchanged:: 2.7.9 The *context* parameter was added. All the neccessary certificate and hostname checks are done by default. .. deprecated:: 2.6 The :func:`urlopen` function has been removed in Python 3 in favor of :func:`urllib2.urlopen`. .. function:: urlretrieve(url[, filename[, reporthook[, data[, context]]]]) Copy a network object denoted by a URL to a local file, if necessary. If the URL points to a local file, or a valid cached copy of the object exists, the object is not copied. Return a tuple ``(filename, headers)`` where *filename* is the local file name under which the object can be found, and *headers* is whatever the :meth:`info` method of the object returned by :func:`urlopen` returned (for a remote object, possibly cached). Exceptions are the same as for :func:`urlopen`. The second argument, if present, specifies the file location to copy to (if absent, the location will be a tempfile with a generated name). The third argument, if present, is a callable that will be called once on establishment of the network connection and once after each block read thereafter. The callable will be passed three arguments; a count of blocks transferred so far, a block size in bytes, and the total size of the file. The third argument may be ``-1`` on older FTP servers which do not return a file size in response to a retrieval request. If the *url* uses the :file:`http:` scheme identifier, the optional *data* argument may be given to specify a ``POST`` request (normally the request type is ``GET``). The *data* argument must in standard :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode` function below. The *context* parameter may be set to a :class:`ssl.SSLContext` instance to configure the SSL settings that are used if :func:`urlretrieve` makes a HTTPS connection. .. versionchanged:: 2.5 :func:`urlretrieve` will raise :exc:`ContentTooShortError` when it detects that the amount of data available was less than the expected amount (which is the size reported by a *Content-Length* header). This can occur, for example, when the download is interrupted. The *Content-Length* is treated as a lower bound: if there's more data to read, :func:`urlretrieve` reads more data, but if less data is available, it raises the exception. You can still retrieve the downloaded data in this case, it is stored in the :attr:`content` attribute of the exception instance. If no *Content-Length* header was supplied, :func:`urlretrieve` can not check the size of the data it has downloaded, and just returns it. In this case you just have to assume that the download was successful. .. versionchanged:: 2.7.9 The *context* parameter was added. All the neccessary certificate and hostname checks are done by default. .. data:: _urlopener The public functions :func:`urlopen` and :func:`urlretrieve` create an instance of the :class:`FancyURLopener` class and use it to perform their requested actions. To override this functionality, programmers can create a subclass of :class:`URLopener` or :class:`FancyURLopener`, then assign an instance of that class to the ``urllib._urlopener`` variable before calling the desired function. For example, applications may want to specify a different :mailheader:`User-Agent` header than :class:`URLopener` defines. This can be accomplished with the following code:: import urllib class AppURLopener(urllib.FancyURLopener): version = "App/1.7" urllib._urlopener = AppURLopener() .. function:: urlcleanup() Clear the cache that may have been built up by previous calls to :func:`urlretrieve`. Utility functions ----------------- .. function:: quote(string[, safe]) Replace special characters in *string* using the ``%xx`` escape. Letters, digits, and the characters ``'_.-'`` are never quoted. By default, this function is intended for quoting the path section of the URL. The optional *safe* parameter specifies additional characters that should not be quoted --- its default value is ``'/'``. Example: ``quote('/~connolly/')`` yields ``'/%7econnolly/'``. .. function:: quote_plus(string[, safe]) Like :func:`quote`, but also replaces spaces by plus signs, as required for quoting HTML form values when building up a query string to go into a URL. Plus signs in the original string are escaped unless they are included in *safe*. It also does not have *safe* default to ``'/'``. .. function:: unquote(string) Replace ``%xx`` escapes by their single-character equivalent. Example: ``unquote('/%7Econnolly/')`` yields ``'/~connolly/'``. .. function:: unquote_plus(string) Like :func:`unquote`, but also replaces plus signs by spaces, as required for unquoting HTML form values. .. function:: urlencode(query[, doseq]) Convert a mapping object or a sequence of two-element tuples to a "percent-encoded" string, suitable to pass to :func:`urlopen` above as the optional *data* argument. This is useful to pass a dictionary of form fields to a ``POST`` request. The resulting string is a series of ``key=value`` pairs separated by ``'&'`` characters, where both *key* and *value* are quoted using :func:`quote_plus` above. When a sequence of two-element tuples is used as the *query* argument, the first element of each tuple is a key and the second is a value. The value element in itself can be a sequence and in that case, if the optional parameter *doseq* is evaluates to ``True``, individual ``key=value`` pairs separated by ``'&'`` are generated for each element of the value sequence for the key. The order of parameters in the encoded string will match the order of parameter tuples in the sequence. The :mod:`urlparse` module provides the functions :func:`parse_qs` and :func:`parse_qsl` which are used to parse query strings into Python data structures. .. function:: pathname2url(path) Convert the pathname *path* from the local syntax for a path to the form used in the path component of a URL. This does not produce a complete URL. The return value will already be quoted using the :func:`quote` function. .. function:: url2pathname(path) Convert the path component *path* from a percent-encoded URL to the local syntax for a path. This does not accept a complete URL. This function uses :func:`unquote` to decode *path*. .. function:: getproxies() This helper function returns a dictionary of scheme to proxy server URL mappings. It scans the environment for variables named ``_proxy``, in case insensitive way, for all operating systems first, and when it cannot find it, looks for proxy information from Mac OSX System Configuration for Mac OS X and Windows Systems Registry for Windows. If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. .. note:: If the environment variable ``REQUEST_METHOD`` is set, which usually indicates your script is running in a CGI environment, the environment variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is because that variable can be injected by a client using the "Proxy:" HTTP header. If you need to use an HTTP proxy in a CGI environment, either use ``ProxyHandler`` explicitly, or make sure the variable name is in lowercase (or at least the ``_proxy`` suffix). .. note:: urllib also exposes certain utility functions like splittype, splithost and others parsing URL into various components. But it is recommended to use :mod:`urlparse` for parsing URLs rather than using these functions directly. Python 3 does not expose these helper functions from :mod:`urllib.parse` module. URL Opener objects ------------------ .. class:: URLopener([proxies[, context[, **x509]]]) Base class for opening and reading URLs. Unless you need to support opening objects using schemes other than :file:`http:`, :file:`ftp:`, or :file:`file:`, you probably want to use :class:`FancyURLopener`. By default, the :class:`URLopener` class sends a :mailheader:`User-Agent` header of ``urllib/VVV``, where *VVV* is the :mod:`urllib` version number. Applications can define their own :mailheader:`User-Agent` header by subclassing :class:`URLopener` or :class:`FancyURLopener` and setting the class attribute :attr:`version` to an appropriate string value in the subclass definition. The optional *proxies* parameter should be a dictionary mapping scheme names to proxy URLs, where an empty dictionary turns proxies off completely. Its default value is ``None``, in which case environmental proxy settings will be used if present, as discussed in the definition of :func:`urlopen`, above. The *context* parameter may be a :class:`ssl.SSLContext` instance. If given, it defines the SSL settings the opener uses to make HTTPS connections. Additional keyword parameters, collected in *x509*, may be used for authentication of the client when using the :file:`https:` scheme. The keywords *key_file* and *cert_file* are supported to provide an SSL key and certificate; both are needed to support client authentication. :class:`URLopener` objects will raise an :exc:`IOError` exception if the server returns an error code. .. versionchanged:: 2.7.9 The *context* parameter was added. All the neccessary certificate and hostname checks are done by default. .. method:: open(fullurl[, data]) Open *fullurl* using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with its input arguments. If the scheme is not recognized, :meth:`open_unknown` is called. The *data* argument has the same meaning as the *data* argument of :func:`urlopen`. .. method:: open_unknown(fullurl[, data]) Overridable interface to open unknown URL types. .. method:: retrieve(url[, filename[, reporthook[, data]]]) Retrieves the contents of *url* and places it in *filename*. The return value is a tuple consisting of a local filename and either a :class:`mimetools.Message` object containing the response headers (for remote URLs) or ``None`` (for local URLs). The caller must then open and read the contents of *filename*. If *filename* is not given and the URL refers to a local file, the input filename is returned. If the URL is non-local and *filename* is not given, the filename is the output of :func:`tempfile.mktemp` with a suffix that matches the suffix of the last path component of the input URL. If *reporthook* is given, it must be a function accepting three numeric parameters. It will be called after each chunk of data is read from the network. *reporthook* is ignored for local URLs. If the *url* uses the :file:`http:` scheme identifier, the optional *data* argument may be given to specify a ``POST`` request (normally the request type is ``GET``). The *data* argument must in standard :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode` function below. .. attribute:: version Variable that specifies the user agent of the opener object. To get :mod:`urllib` to tell servers that it is a particular user agent, set this in a subclass as a class variable or in the constructor before calling the base constructor. .. class:: FancyURLopener(...) :class:`FancyURLopener` subclasses :class:`URLopener` providing default handling for the following HTTP response codes: 301, 302, 303, 307 and 401. For the 30x response codes listed above, the :mailheader:`Location` header is used to fetch the actual URL. For 401 response codes (authentication required), basic HTTP authentication is performed. For the 30x response codes, recursion is bounded by the value of the *maxtries* attribute, which defaults to 10. For all other response codes, the method :meth:`http_error_default` is called which you can override in subclasses to handle the error appropriately. .. note:: According to the letter of :rfc:`2616`, 301 and 302 responses to POST requests must not be automatically redirected without confirmation by the user. In reality, browsers do allow automatic redirection of these responses, changing the POST to a GET, and :mod:`urllib` reproduces this behaviour. The parameters to the constructor are the same as those for :class:`URLopener`. .. note:: When performing basic authentication, a :class:`FancyURLopener` instance calls its :meth:`prompt_user_passwd` method. The default implementation asks the users for the required information on the controlling terminal. A subclass may override this method to support more appropriate behavior if needed. The :class:`FancyURLopener` class offers one additional method that should be overloaded to provide the appropriate behavior: .. method:: prompt_user_passwd(host, realm) Return information needed to authenticate the user at the given host in the specified security realm. The return value should be a tuple, ``(user, password)``, which can be used for basic authentication. The implementation prompts for this information on the terminal; an application should override this method to use an appropriate interaction model in the local environment. .. exception:: ContentTooShortError(msg[, content]) This exception is raised when the :func:`urlretrieve` function detects that the amount of the downloaded data is less than the expected amount (given by the *Content-Length* header). The :attr:`content` attribute stores the downloaded (and supposedly truncated) data. .. versionadded:: 2.5 :mod:`urllib` Restrictions -------------------------- .. index:: pair: HTTP; protocol pair: FTP; protocol * Currently, only the following protocols are supported: HTTP, (versions 0.9 and 1.0), FTP, and local files. * The caching feature of :func:`urlretrieve` has been disabled until I find the time to hack proper processing of Expiration time headers. * There should be a function to query whether a particular URL is in the cache. * For backward compatibility, if a URL appears to point to a local file but the file can't be opened, the URL is re-interpreted using the FTP protocol. This can sometimes cause confusing error messages. * The :func:`urlopen` and :func:`urlretrieve` functions can cause arbitrarily long delays while waiting for a network connection to be set up. This means that it is difficult to build an interactive Web client using these functions without using threads. .. index:: single: HTML pair: HTTP; protocol module: htmllib * The data returned by :func:`urlopen` or :func:`urlretrieve` is the raw data returned by the server. This may be binary data (such as an image), plain text or (for example) HTML. The HTTP protocol provides type information in the reply header, which can be inspected by looking at the :mailheader:`Content-Type` header. If the returned data is HTML, you can use the module :mod:`htmllib` to parse it. .. index:: single: FTP * The code handling the FTP protocol cannot differentiate between a file and a directory. This can lead to unexpected behavior when attempting to read a URL that points to a file that is not accessible. If the URL ends in a ``/``, it is assumed to refer to a directory and will be handled accordingly. But if an attempt to read a file leads to a 550 error (meaning the URL cannot be found or is not accessible, often for permission reasons), then the path is treated as a directory in order to handle the case when a directory is specified by a URL but the trailing ``/`` has been left off. This can cause misleading results when you try to fetch a file whose read permissions make it inaccessible; the FTP code will try to read it, fail with a 550 error, and then perform a directory listing for the unreadable file. If fine-grained control is needed, consider using the :mod:`ftplib` module, subclassing :class:`FancyURLopener`, or changing *_urlopener* to meet your needs. * This module does not support the use of proxies which require authentication. This may be implemented in the future. .. index:: module: urlparse * Although the :mod:`urllib` module contains (undocumented) routines to parse and unparse URL strings, the recommended interface for URL manipulation is in module :mod:`urlparse`. .. _urllib-examples: Examples -------- Here is an example session that uses the ``GET`` method to retrieve a URL containing parameters:: >>> import urllib >>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) >>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params) >>> print f.read() The following example uses the ``POST`` method instead:: >>> import urllib >>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) >>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params) >>> print f.read() The following example uses an explicitly specified HTTP proxy, overriding environment settings:: >>> import urllib >>> proxies = {'http': 'http://proxy.example.com:8080/'} >>> opener = urllib.FancyURLopener(proxies) >>> f = opener.open("http://www.python.org") >>> f.read() The following example uses no proxies at all, overriding environment settings:: >>> import urllib >>> opener = urllib.FancyURLopener({}) >>> f = opener.open("http://www.python.org/") >>> f.read()