Resolves the parts of #1096 in requests proper.
diff --git a/requests/models.py b/requests/models.py
index 5202e6f4ba..b7d52cd74a 100644
--- a/requests/models.py
+++ b/requests/models.py
@@ -375,13 +375,7 @@ def prepare_body(self, data, files):
                     else:
                         content_type = 'application/x-www-form-urlencoded'
 
-            self.headers['Content-Length'] = '0'
-            if hasattr(body, 'seek') and hasattr(body, 'tell'):
-                body.seek(0, 2)
-                self.headers['Content-Length'] = str(body.tell())
-                body.seek(0, 0)
-            elif body is not None:
-                self.headers['Content-Length'] = str(len(body))
+            self.prepare_content_length(body)
 
             # Add content-type if it wasn't explicitly provided.
             if (content_type) and (not 'content-type' in self.headers):
@@ -389,6 +383,15 @@ def prepare_body(self, data, files):
 
         self.body = body
 
+    def prepare_content_length(self, body):
+        self.headers['Content-Length'] = '0'
+        if hasattr(body, 'seek') and hasattr(body, 'tell'):
+            body.seek(0, 2)
+            self.headers['Content-Length'] = str(body.tell())
+            body.seek(0, 0)
+        elif body is not None:
+            self.headers['Content-Length'] = str(len(body))
+
     def prepare_auth(self, auth):
         """Prepares the given HTTP auth data."""
         if auth:
@@ -402,6 +405,9 @@ def prepare_auth(self, auth):
             # Update self to reflect the auth changes.
             self.__dict__.update(r.__dict__)
 
+            # Recompute Content-Length
+            self.prepare_content_length(self.body)
+
     def prepare_cookies(self, cookies):
         """Prepares the given HTTP cookie data."""
 
