From 44aa6806f3bf2255c151ec2661b8765ca190c0c4 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 13 Feb 2011 18:03:48 -0500 Subject: [PATCH] Basic POST in place. --- requests/core.py | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/requests/core.py b/requests/core.py index 940ff06..25b6af9 100644 --- a/requests/core.py +++ b/requests/core.py @@ -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 -- 2.7.4