Index: stamper/http.py
===================================================================
--- stamper/http.py	(revision 51)
+++ stamper/http.py	(revision 53)
@@ -1,4 +1,6 @@
 
-from urllib2 import Request, urlopen
+from urllib2 import (
+    Request, urlopen, build_opener, install_opener, HTTPCookieProcessor
+    )
 from urllib import urlencode
 from urlparse import urljoin
@@ -7,15 +9,11 @@
 class HTTPClient(object):
 
-    def __init__(self, base_url, user=None, password=None):
+    def __init__(self, base_url):
         self.base_url = base_url
-        self.user = user
-        self.password = password
-
-    def authenticate(self):
-        return 'not ready yet'
+        self.request = build_opener(HTTPCookieProcessor())
+        install_opener(self.request)
 
     def send_request(self, url, data=None):
-        request = Request(url, data)
-        response = urlopen(request)
+        response = self.request.open(url, data)
         return response.read()
 
Index: stamper/stamper.py
===================================================================
--- stamper/stamper.py	(revision 52)
+++ stamper/stamper.py	(revision 53)
@@ -20,5 +20,7 @@
 SECS_DAY = HOURS_DAY * 60 * 60
 REMOTE_BASE_URL = 'https://localhost'
-REMOTE_PUSH_URL = '/stamper/listen/'  # IMPORTANT: keep the trailing /
+# IMPORTANT: keep the trailing / on these _URL variables
+REMOTE_LOGIN_URL = '/stamper/login/'
+REMOTE_PUSH_URL = '/stamper/listen/'
 REMOTE_USER = None
 REMOTE_PASSWORD = None
@@ -453,4 +455,6 @@
                 stamps.append(stamp)
         stamps = json.dumps(stamps, indent=4)
-        http_client = HTTPClient(REMOTE_BASE_URL, REMOTE_USER, REMOTE_PASSWORD)
+        http_client = HTTPClient(REMOTE_BASE_URL)
+        http_client.post(REMOTE_LOGIN_URL, {'username': REMOTE_USER,
+                                            'password': REMOTE_PASSWORD})
         http_client.post(REMOTE_PUSH_URL, {'stamps': stamps})
