1.. % Template for a library manual section. 2.. % PLEASE REMOVE THE COMMENTS AFTER USING THE TEMPLATE 3.. % 4.. % Complete documentation on the extended LaTeX markup used for Python 5.. % documentation is available in ``Documenting Python'', which is part 6.. % of the standard documentation for Python. It may be found online 7.. % at: 8.. % 9.. % http://www.python.org/doc/current/doc/doc.html 10.. % ==== 0. ==== 11.. % Copy this file to <mydir>/lib<mymodule>.tex, and edit that file 12.. % according to the instructions below. 13 14.. % ==== 1. ==== 15.. % The section prologue. Give the section a title and provide some 16.. % meta-information. References to the module should use 17.. % \refbimodindex, \refstmodindex, \refexmodindex or \refmodindex, as 18.. % appropriate. 19 20 21:mod:`httplib2` A comprehensive HTTP client library. 22===================================================== 23 24.. module:: httplib2 25.. moduleauthor:: Joe Gregorio <joe@bitworking.org> 26.. sectionauthor:: Joe Gregorio <joe@bitworking.org> 27 28 29.. % Choose one of these to specify the module module name. If there's 30.. % an underscore in the name, use 31.. % \declaremodule[modname]{...}{mod_name} instead. 32.. % 33.. % not standard, in Python 34.. % Portability statement: Uncomment and fill in the parameter to specify the 35.. % availability of the module. The parameter can be Unix, IRIX, SunOS, Mac, 36.. % Windows, or lots of other stuff. When ``Mac'' is specified, the availability 37.. % statement will say ``Macintosh'' and the Module Index may say ``Mac''. 38.. % Please use a name that has already been used whenever applicable. If this 39.. % is omitted, no availability statement is produced or implied. 40.. % 41.. % \platform{Unix} 42.. % These apply to all modules, and may be given more than once: 43.. % Author of the module code; 44.. % omit if not known. 45.. % Author of the documentation, 46.. % even if not a module section. 47 48 49 50.. % Leave at least one blank line after this, to simplify ad-hoc tools 51.. % that are sometimes used to massage these files. 52 53The :mod:`httplib2` module is a comprehensive HTTP client library with the 54following features: 55 56.. % ==== 2. ==== 57.. % Give a short overview of what the module does. 58.. % If it is platform specific, mention this. 59.. % Mention other important restrictions or general operating principles. 60.. % For example: 61 62.. describe:: HTTP and HTTPS 63 64 HTTPS support is only available if the socket module was compiled with SSL 65 support. 66 67.. describe:: Keep-Alive 68 69 Supports HTTP 1.1 Keep-Alive, keeping the socket open and performing multiple 70 requests over the same connection if possible. 71 72.. describe:: Authentication 73 74 The following three types of HTTP Authentication are supported. These can be 75 used over both HTTP and HTTPS. 76 77 * Digest 78 * Basic 79 * WSSE 80 81.. describe:: Caching 82 83 The module can optionally operate with a private cache that understands the 84 Cache-Control: header and uses both the ETag and Last-Modified cache validators. 85 86.. describe:: All Methods 87 88 The module can handle any HTTP request method, not just GET and POST. 89 90.. describe:: Redirects 91 92 Automatically follows 3XX redirects on GETs. 93 94.. describe:: Compression 95 96 Handles both ``deflate`` and ``gzip`` types of compression. 97 98.. describe:: Lost update support 99 100 Automatically adds back ETags into PUT requests to resources we have already 101 cached. This implements Section 3.2 of Detecting the Lost Update Problem Using 102 Unreserved Checkout 103 104The :mod:`httplib2` module defines the following variables: 105 106.. % ==== 3. ==== 107.. % List the public functions defined by the module. Begin with a 108.. % standard phrase. You may also list the exceptions and other data 109.. % items defined in the module, insofar as they are important for the 110.. % user. 111.. % ---- 3.2. ---- 112.. % Data items are described using a ``datadesc'' block. This has only 113.. % one parameter: the item's name. 114 115 116.. data:: debuglevel 117 118 The amount of debugging information to print. The default is 0. 119 120 121.. data:: RETRIES 122 123 A request will be tried 'RETRIES' times if it fails at the socket/connection level. 124 The default is 2. 125 126The :mod:`httplib2` module may raise the following Exceptions. Note that there 127is an option that turns exceptions into normal responses with an HTTP status 128code indicating an error occured. See 129:attr:`Http.force_exception_to_status_code` 130 131.. % --- 3.3. --- 132.. % Exceptions are described using a ``excdesc'' block. This has only 133.. % one parameter: the exception name. Exceptions defined as classes in 134.. % the source code should be documented using this environment, but 135.. % constructor parameters must be omitted. 136 137 138.. exception:: HttpLib2Error 139 140 The Base Exception for all exceptions raised by httplib2. 141 142 143.. exception:: RedirectMissingLocation 144 145 A 3xx redirect response code was provided but no Location: header was provided 146 to point to the new location. 147 148 149.. exception:: RedirectLimit 150 151 The maximum number of redirections was reached without coming to a final URI. 152 153 154.. exception:: ServerNotFoundError 155 156 Unable to resolve the host name given. 157 158 159.. exception:: RelativeURIError 160 161 A relative, as opposed to an absolute URI, was passed into request(). 162 163 164.. exception:: FailedToDecompressContent 165 166 The headers claimed that the content of the response was compressed but the 167 decompression algorithm applied to the content failed. 168 169 170.. exception:: UnimplementedDigestAuthOptionError 171 172 The server requested a type of Digest authentication that we are unfamiliar 173 with. 174 175 176.. exception:: UnimplementedHmacDigestAuthOptionError 177 178 The server requested a type of HMACDigest authentication that we are unfamiliar 179 with. 180 181.. % ---- 3.4. ---- 182.. % Other standard environments: 183.. % 184.. % classdesc - Python classes; same arguments are funcdesc 185.. % methoddesc - methods, like funcdesc but has an optional parameter 186.. % to give the type name: \begin{methoddesc}[mytype]{name}{args} 187.. % By default, the type name will be the name of the 188.. % last class defined using classdesc. The type name 189.. % is required if the type is implemented in C (because 190.. % there's no classdesc) or if the class isn't directly 191.. % documented (if it's private). 192.. % memberdesc - data members, like datadesc, but with an optional 193.. % type name like methoddesc. 194 195 196.. class:: Http([cache=None], [timeout=None], [proxy_info==ProxyInfo.from_environment], [ca_certs=None], [disable_ssl_certificate_validation=False]) 197 198 The class that represents a client HTTP interface. The *cache* parameter is 199 either the name of a directory to be used as a flat file cache, or it must an 200 object that implements the required caching interface. The *timeout* parameter 201 is the socket level timeout. The *ca_certs* parameter is the filename of the 202 CA certificates to use. If none is given a default set is used. The 203 *disable_ssl_certificate_validation* boolean flag determines if ssl certificate validation 204 is done. The *proxy_info* parameter is an object of type :class:`ProxyInfo`. 205 206 207.. class:: ProxyInfo(proxy_type, proxy_host, proxy_port, [proxy_rdns=None], [proxy_user=None], [proxy_pass=None]) 208 209 Collect information required to use a proxy. 210 The parameter proxy_type must be set to one of socks.PROXY_TYPE_XXX 211 constants. For example: :: 212 213 p = ProxyInfo(proxy_type=socks.PROXY_TYPE_HTTP, proxy_host='localhost', proxy_port=8000) 214 215.. class:: Response(info) 216 217 Response is a subclass of :class:`dict` and instances of this class are 218 returned from calls to Http.request. The *info* parameter is either an 219 :class:`rfc822.Message` or an :class:`httplib.HTTPResponse` object. 220 221 222.. class:: FileCache(dir_name, [safe=safename]) 223 224 FileCache implements a Cache as a directory of files. The *dir_name* parameter 225 is the name of the directory to use. If the directory does not exist then 226 FileCache attempts to create the directory. The optional *safe* parameter is a 227 funtion which generates the cache filename for each URI. A FileCache object is 228 constructed and used for caching when you pass a directory name into the 229 constructor of :class:`Http`. 230 231Http objects have the following methods: 232 233.. % If your module defines new object types (for a built-in module) or 234.. % classes (for a module written in Python), you should list the 235.. % methods and instance variables (if any) of each type or class in a 236.. % separate subsection. 237 238.. _http-objects: 239 240Http Objects 241--------------- 242 243.. method:: Http.request(uri, [method="GET", body=None, headers=None, redirections=DEFAULT_MAX_REDIRECTS, connection_type=None]) 244 245 Performs a single HTTP request. The *uri* is the URI of the HTTP resource and 246 can begin with either ``http`` or ``https``. The value of *uri* must be an 247 absolute URI. 248 249 The *method* is the HTTP method to perform, such as ``GET``, ``POST``, 250 ``DELETE``, etc. There is no restriction on the methods allowed. 251 252 The *body* is the entity body to be sent with the request. It is a string 253 object. 254 255 Any extra headers that are to be sent with the request should be provided in the 256 *headers* dictionary. 257 258 The maximum number of redirect to follow before raising an exception is 259 *redirections*. The default is 5. 260 261 The *connection_type* is the type of connection object to use. The supplied 262 class should implement the interface of httplib.HTTPConnection. 263 264 The return value is a tuple of (response, content), the first being an instance 265 of the :class:`Response` class, the second being a string that contains the 266 response entity body. 267 268 269.. method:: Http.add_credentials(name, password, [domain=None]) 270 271 Adds a name and password that will be used when a request requires 272 authentication. Supplying the optional *domain* name will restrict these 273 credentials to only be sent to the specified domain. If *domain* is not 274 specified then the given credentials will be used to try to satisfy every HTTP 275 401 challenge. 276 277 278.. method:: Http.add_certificate(key, cert, domain) 279 280 Add a *key* and *cert* that will be used for an SSL connection to the specified 281 domain. *keyfile* is the name of a PEM formatted file that contains your 282 private key. *certfile* is a PEM formatted certificate chain file. 283 284 285.. method:: Http.clear_credentials() 286 287 Remove all the names and passwords used for authentication. 288 289 290.. attribute:: Http.follow_redirects 291 292 If ``True``, which is the default, safe redirects are followed, where safe means 293 that the client is only doing a ``GET`` or ``HEAD`` on the URI to which it is 294 being redirected. If ``False`` then no redirects are followed. Note that a False 295 'follow_redirects' takes precedence over a True 'follow_all_redirects'. Another 296 way of saying that is for 'follow_all_redirects' to have any affect, 297 'follow_redirects' must be True. 298 299 300.. attribute:: Http.follow_all_redirects 301 302 If ``False``, which is the default, only safe redirects are followed, where safe 303 means that the client is only doing a ``GET`` or ``HEAD`` on the URI to which it 304 is being redirected. If ``True`` then all redirects are followed. Note that a 305 False 'follow_redirects' takes precedence over a True 'follow_all_redirects'. 306 Another way of saying that is for 'follow_all_redirects' to have any affect, 307 'follow_redirects' must be True. 308 309 310.. attribute:: Http.forward_authorization_headers 311 312 If ``False``, which is the default, then Authorization: headers are 313 stripped from redirects. If ``True`` then Authorization: headers are left 314 in place when following redirects. This parameter only applies if following 315 redirects is turned on. Note that turning this on could cause your credentials 316 to leak, so carefully consider the consequences. 317 318 319.. attribute:: Http.force_exception_to_status_code 320 321 If ``True`` then no :mod:`httplib2` exceptions will be 322 thrown. Instead, those error conditions will be turned into :class:`Response` 323 objects that will be returned normally. 324 325 If ``False``, which is the default, then exceptions will be thrown. 326 327 328.. attribute:: Http.optimistic_concurrency_methods 329 330 By default a list that only contains "PUT", this attribute 331 controls which methods will get 'if-match' headers attached 332 to them from cached responses with etags. You can append 333 new items to this list to add new methods that should 334 get this support, such as "PATCH". 335 336.. attribute:: Http.ignore_etag 337 338 Defaults to ``False``. If ``True``, then any etags present in the cached 339 response are ignored when processing the current request, i.e. httplib2 does 340 **not** use 'if-match' for PUT or 'if-none-match' when GET or HEAD requests are 341 made. This is mainly to deal with broken servers which supply an etag, but 342 change it capriciously. 343 344If you wish to supply your own caching implementation then you will need to pass 345in an object that supports the following methods. Note that the :mod:`memcache` 346module supports this interface natively. 347 348 349.. _cache-objects: 350 351Cache Objects 352-------------- 353 354.. method:: Cache.get(key) 355 356 Takes a string *key* and returns the value as a string. 357 358 359.. method:: Cache.set(key, value) 360 361 Takes a string *key* and *value* and stores it in the cache. 362 363 364.. method:: Cache.delete(key) 365 366 Deletes the cached value stored at *key*. The value of *key* is a string. 367 368Response objects are derived from :class:`dict` and map header names (lower case 369with the trailing colon removed) to header values. In addition to the dict 370methods a Response object also has: 371 372 373.. _response-objects: 374 375Response Objects 376------------------ 377 378 379.. attribute:: Response.fromcache 380 381 If ``true`` the response was returned from the cache. 382 383 384.. attribute:: Response.version 385 386 The version of HTTP that the server supports. A value of 11 means '1.1'. 387 388 389.. attribute:: Response.status 390 391 The numerical HTTP status code returned in the response. 392 393 394.. attribute:: Response.reason 395 396 The human readable component of the HTTP response status code. 397 398 399.. attribute:: Response.previous 400 401 If redirects are followed then the :class:`Response` object returned is just for 402 the very last HTTP request and *previous* points to the previous 403 :class:`Response` object. In this manner they form a chain going back through 404 the responses to the very first response. Will be ``None`` if there are no 405 previous responses. 406 407The Response object also populates the header ``content-location``, that 408contains the URI that was ultimately requested. This is useful if redirects were 409encountered, you can determine the ultimate URI that the request was sent to. 410All Response objects contain this key value, including ``previous`` responses so 411you can determine the entire chain of redirects. If 412:attr:`Http.force_exception_to_status_code` is ``True`` and the number of 413redirects has exceeded the number of allowed number of redirects then the 414:class:`Response` object will report the error in the status code, but the 415complete chain of previous responses will still be in tact. 416 417To do a simple ``GET`` request just supply the absolute URI of the resource: 418 419.. % ==== 4. ==== 420.. % Now is probably a good time for a complete example. (Alternatively, 421.. % an example giving the flavor of the module may be given before the 422.. % detailed list of functions.) 423 424.. _httplib2-example: 425 426Examples 427--------- 428 429:: 430 431 import httplib2 432 h = httplib2.Http() 433 resp, content = h.request("http://bitworking.org/") 434 assert resp.status == 200 435 assert resp['content-type'] == 'text/html' 436 437Here is more complex example that does a PUT of some text to a resource that 438requires authentication. The Http instance also uses a file cache in the 439directory ``.cache``. :: 440 441 import httplib2 442 h = httplib2.Http(".cache") 443 h.add_credentials('name', 'password') 444 resp, content = h.request("https://example.org/chap/2", 445 "PUT", body="This is text", 446 headers={'content-type':'text/plain'} ) 447 448Here is an example that connects to a server that supports the Atom Publishing 449Protocol. :: 450 451 import httplib2 452 h = httplib2.Http() 453 h.add_credentials(myname, mypasswd) 454 h.follow_all_redirects = True 455 headers = {'Content-Type': 'application/atom+xml'} 456 body = """<?xml version="1.0" ?> 457 <entry xmlns="http://www.w3.org/2005/Atom"> 458 <title>Atom-Powered Robots Run Amok</title> 459 <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> 460 <updated>2003-12-13T18:30:02Z</updated> 461 <author><name>John Doe</name></author> 462 <content>Some text.</content> 463 </entry> 464 """ 465 uri = "http://www.example.com/collection/" 466 resp, content = h.request(uri, "POST", body=body, headers=headers) 467 468Here is an example of providing data to an HTML form processor. In this case we 469presume this is a POST form. We need to take our data and format it as 470"application/x-www-form-urlencoded" data and use that as a body for a POST 471request. 472 473 474:: 475 476 >>> import httplib2 477 >>> import urllib 478 >>> data = {'name': 'fred', 'address': '123 shady lane'} 479 >>> body = urllib.urlencode(data) 480 >>> body 481 'name=fred&address=123+shady+lane' 482 >>> h = httplib2.Http() 483 >>> resp, content = h.request("http://example.com", method="POST", body=body) 484