Basic POST in place.
authorKenneth Reitz <me@kennethreitz.com>
Sun, 13 Feb 2011 23:03:48 +0000 (18:03 -0500)
committerKenneth Reitz <me@kennethreitz.com>
Sun, 13 Feb 2011 23:03:48 +0000 (18:03 -0500)
requests/core.py

index 940ff06..25b6af9 100644 (file)
@@ -34,10 +34,11 @@ class Request(object):
        _METHODS = ('get', 'head', 'put', 'post', 'delete')
        
        def __init__(self):
+               self.url = None
                self.headers = dict()
                self.method = None
                self.params = {}
-               self.data = None
+               self.data = {}
                self.response = Response()
                self.auth = None
                self.sent = False
@@ -64,12 +65,7 @@ class Request(object):
                if self.method.lower() == 'get':
                        if (not self.sent) or anyway:
                                try:
-                                       r = urllib.urlopen('http://kennethreitz.com')
-                                       self.response.headers = r.headers.dict
-                                       self.response.status_code = r.code
-                                       self.response.content =  r.read()
-                                       
-                                       success = True
+                                       pass
 
                                except Exception:
                                        raise RequestException
@@ -98,7 +94,38 @@ class Request(object):
                elif self.method.lower() == 'post':
                        if (not self.sent) or anyway:
                                try:
-                                       pass
+
+                                       req = urllib2.Request(self.url)
+
+                                       if self.headers:
+                                               r.headers = self.headers
+
+                                       # url encode form data if it's a dict
+                                       if isinstance(self.data, dict):
+                                               req.data = urllib.urlencode(self.data)
+                                       else:
+                                               req.data = self.data
+
+
+                                       if self.auth:
+
+                                               # create a password manager
+                                               password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
+
+                                               # Add the username and password.
+                                               # If we knew the realm, we could use it instead of ``None``.
+                                               password_mgr.add_password(None, self.url, self.auth.username, self.auth.password)
+                                               handler = urllib2.HTTPBasicAuthHandler(password_mgr)
+                                               opener = urllib2.build_opener(handler)
+
+                                               # use the opener to fetch a URL
+                                               resp = opener.open(req)
+                                       else:
+                                               resp =  urllib2.urlopen(req)
+
+                                       self.response.status_code = resp.code
+                                       self.response.headers = resp.info().dict
+                                       self.response.content = resp.read()
                                        
                                        success = True
 
@@ -162,14 +189,14 @@ def get(url, params={}, headers={}, auth=None):
        return r.response
 
 
-def head(url, params={}, headers={}, auth=None):
+def head(url, data={}, headers={}, auth=None):
        """Sends a HEAD request. Returns :class:`Response` object.
        """
        r = Request()
        
        r.method = 'HEAD'
        # return response object
-       
+       r.data = data
        r.headers = headers
        r.auth = _detect_auth(url, auth)
        
@@ -178,13 +205,14 @@ def head(url, params={}, headers={}, auth=None):
        return r.response
 
 
-def post(url, params={}, headers={}, auth=None):
+def post(url, data={}, headers={}, auth=None):
        """Sends a POST request. Returns :class:`Response` object.
        """
        r = Request()
-       
+
+       r.url = url
        r.method = 'POST'
-       # return response object
+       r.data = data
        
        r.headers = headers
        r.auth = _detect_auth(url, auth)
@@ -255,4 +283,3 @@ class URLRequired(RequestException):
        
 class InvalidMethod(RequestException):
        """An inappropriate method was attempted."""
-       
\ No newline at end of file