<html>
<head>
     <!--#include virtual="header.html" -->
    <title>Joe Gregorio | BitWorking | Projects | httplib2.py</title>
</head>
<body class='main' id="top" name="top" >
    <div class="body">
        <!--#include virtual="titlebar.html" -->

        <div class="content">
            
            <div>

                <h2>Httplib2</h2>
                <p>A comprehensive HTTP client library, <code>httplib2.py</code> 
                supports many features left out of other HTTP libraries.
                </p>
                <dl>
                    <dt>HTTP and HTTPS</dt>
                    <dd>HTTPS support is only available if the socket module was compiled with SSL support.
                    </dd>

                    <dt>Keep-Alive</dt>
                    <dd>Supports HTTP 1.1 Keep-Alive, keeping the socket 
                    open and performing multiple requests over the same connection
                    if possible.
                    </dd>

                    <dt>Authentication</dt>
                    <dd>The following types of HTTP Authentication are supported. 
                    These can be used over both HTTP and HTTPS.
                    <ul>
                        <li><a href="http://www.faqs.org/rfcs/rfc2617.html">Digest</a></li>
                        <li><a href="http://www.faqs.org/rfcs/rfc2617.html">Basic</a></li>
                        <li><a href="http://www.xml.com/pub/a/2003/12/17/dive.html">WSSE</a></li>
                        <li><a href="http://franklinmint.fm/2006/02/28/draft-sayre-http-hmac-digest.html">HMAC Digest</a></li>
                        <li><a href="http://code.google.com/apis/accounts/AuthForInstalledApps.html">Google Account Authentication</a></li>
                    </ul>
                    </dd>

                    <dt>Caching</dt>
                    <dd>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.
                    </dd>

                    <dt>All Methods</dt>
                    <dd>The module can handle any HTTP request method, not just GET and POST.</dd>

                    <dt>Redirects</dt>
                    <dd>Automatically follows 3XX redirects on GETs.</dd>

                    <dt>Compression</dt>
                    <dd>Handles both 'deflate' and 'gzip' types of compression.</dd>

                    <dt>Lost update support</dt>
                    <dd>Automatically adds back ETags into PUT requests to resources
                    we have already cached. This implements Section 3.2 of 
                    <a href="http://www.w3.org/1999/04/Editing/#Table">Detecting the Lost Update Problem Using Unreserved Checkout</a></dd>

                    <dt>Unit Tested</dt>
                    <dd>A large and growing set of unit tests.</dd>

                </dl>

<h3>Usage</h3>

<p>A simple retrieval:</p>

<pre><code>import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://example.org/", "GET")
</code></pre>

<p>The 'content' is the content retrieved from the URL.
The content is already decompressed or unzipped if necessary.
The 'resp' contains all the response headers.
</p>

<p>To PUT some content to a server that uses SSL
and Basic authentication:</p>

<pre><code>import httplib2
h = httplib2.Http(".cache")
h.add_credentials('name', 'password')
resp, content = h.request("https://example.org/chap/2", 
    "PUT", body="This is text", 
    headers={'content-type':'text/plain'} )
</code></pre>

<p>Use the Cache-Control: header to control
   how the caching operates.</p>

<pre><code>import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://bitworking.org/")
 ...
resp, content = h.request("http://bitworking.org/", 
    headers={'cache-control':'no-cache'})
</code></pre>

<p>The first request will be cached and since this is a request to 
bitworking.org it will be set to be cached for two hours, because
that is how I have my server configured.
Any subsequent GET to that URI will return the value from the
on-disk cache and no request will be made to the server.
You can use the Cache-Control: header to change the caches behavior and
in this example the second request adds the Cache-Control: header with a value
of 'no-cache' which tells the library that the cached copy
must not be used when handling this request.
</p>

<h3>Requirements</h3>

<p>Requires Python 2.3 or later. Does not require
any libraries beyond what is found in the core library.</p>

<h3>Download/Installation</h3>

<p>The latest release of httplib2 is 0.2.0 and 
can be <a href="dist">downloaded from the from 
    the dist directory</a>. See the
<a href="CHANGELOG">CHANGELOG</a> for what's new in this
version.</p>


<p>The httplib2 module is shipped as a distutils package.  To install
the library, first unpack the distribution archive, and issue the following
command:</p>

<pre><code>$ python setup.py install</code></pre>

<p><a href="dist">Download the distribution archives from here</a>. </p>

<p> <a href="test">The resources used in the unit test cases</a>
  are available also. More documentation on them will be forthcoming.</p>

<p>You can also get the sources directly from the SourceForge hosted
  subversion repository.</p>

<pre>svn co https://httplib2.svn.sourceforge.net/svnroot/httplib2/trunk httplib2</pre>
  

<h3>Documentation</h3>

<p>In addition to the <a href="ref/">Python library style documentation</a> there
are also two articles on XML.com, <a href="http://www.xml.com/pub/a/2006/02/01/doing-http-caching-right-introducing-httplib2.html">
    Doing HTTP Caching Right: Introducing httplib2</a> and 
<a href="http://www.xml.com/pub/a/2006/03/29/httplib2-http-persistence-and-authentication.html">
httplib2: HTTP Persistence and Authentication </a>.

</p>

<h3>Feedback</h3>

<p>Bugs and enhancement requests are handled through  
<a href="http://sourceforge.net/projects/httplib2/">SourceForge</a>, and anything is up for discussion
on the <a href="http://sourceforge.net/mail/?group_id=161082">httplib2 mailing list</a>.
</p>

<h3>To Do</h3>

<p>This module is not perfect and needs the following:</p>
<ul>
    <li>Support for Proxies</li>
    <li>A pluggable store for the cache is in place, with plugins for 
    flat files and memcached. 
    I eventually want to have plugins that allow keeping the cache in Berkeley DB, MySQL, etc.</li>
    <li>More unit tests</li>
</ul>

<h3>Project Goal</h3>

<p>To become a worthy addition to the Python core library.</p>

<h3>Additional Information</h3>

<p>
   <dl>
       <dt>Author</dt>
       <dd>Joe Gregorio</dd>

       <dt>License</dt>
       <dd>MIT</dd>

       <dt>Contributors</dt>

       <dd> Thomas Broyer (t.broyer@ltgt.net) </dd>
       <dd> James Antill </dd>
       <dd> Xavier Verges Farrero </dd>
       <dd> Jonathan Feinberg </dd>
       <dd> Blair Zajac </dd>
       <dd> (Your Name Here) </dd>
   </dl>
</p>
    
  <p style="font-size: small">This page last updated on: $LastChangedDate$.</p>

            </div>
        </div>
     <!--#include virtual="footer.html" -->
    </div>
</body>

</html>
