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