From 4f9d598ff486396d9ad45c7e402abe099dec8f4a Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 13 Feb 2011 18:26:17 -0500 Subject: [PATCH] parameters working for GETs now. This is awesome. --- requests/core.py | 55 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/requests/core.py b/requests/core.py index 259ea29..b4d6047 100644 --- a/requests/core.py +++ b/requests/core.py @@ -50,10 +50,30 @@ class Request(object): raise InvalidMethod() object.__setattr__(self, name, value) - + def _checks(self): pass + + + def _get_opener(self): + """ Creates appropriate opener object for urllib2. + """ + + if self.auth: + + # create a password manager + authr = urllib2.HTTPPasswordMgrWithDefaultRealm() + + authr.add_password(None, self.url, self.auth.username, self.auth.password) + handler = urllib2.HTTPBasicAuthHandler(authr) + opener = urllib2.build_opener(handler) + + # use the opener to fetch a URL + return opener.open + else: + return urllib2.urlopen + def send(self, anyway=False): """Sends the request. @@ -65,32 +85,20 @@ class Request(object): if self.method.lower() == 'get': if (not self.sent) or anyway: try: - 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.params = urllib.urlencode(self.params) + # url encode GET params if it's a dict + if isinstance(self.params, dict): + params = urllib.urlencode(self.params) else: - req.params = self.paams - if self.auth: + params = self.params - # create a password manager - password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() + req = urllib2.Request("%s?%s" % (self.url, params)) - # 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) + if self.headers: + req.headers = self.headers - # use the opener to fetch a URL - resp = opener.open(req) - else: - resp = urllib2.urlopen(req) + opener = self._get_opener() + resp = opener(req) self.response.status_code = resp.code self.response.headers = resp.info().dict @@ -99,7 +107,7 @@ class Request(object): success = True - except Exception: + except RequestException: raise RequestException @@ -213,6 +221,7 @@ def get(url, params={}, headers={}, auth=None): r.method = 'GET' r.url = url + r.params = params r.headers = headers r.auth = _detect_auth(url, auth) -- 2.7.4