def request(self, url, method="GET", body="", headers={}): """ Actually sends the request """ # objectify the url url = URL.objectify(url) proxies = None if self.proxy is not None: proxies = {url.scheme: self.proxy} log.debug("using proxy - %s" % (proxies)) # ensure that url is a unicode string url = str(url) combined_headers = dict(self.headers) combined_headers.update(headers) if body is None or body == "" and "Content-Type" in combined_headers: del combined_headers["Content-Type"] log.debug( "sending request - method={0}, url={1}, headers={2}\nbody:\n{3}" .format(method, url, combined_headers, body)) auth = None if self.auth is None and self.username is not None: auth = requests.auth.HTTPDigestAuth(self.username, self.password) else: auth = self.auth r = requests.request(method, url, data=to_wire(body), headers=combined_headers, proxies=proxies, auth=auth, verify=self.ssl_verify_cert) response = DAVResponse(r) # If server supports BasicAuth and not DigestAuth, let's try again: if response.status == 401 and self.auth is None and auth is not None: auth = requests.auth.HTTPBasicAuth(self.username, self.password) r = requests.request(method, url, data=to_wire(body), headers=combined_headers, proxies=proxies, auth=auth, verify=self.ssl_verify_cert) response = DAVResponse(r) # this is an error condition the application wants to know if response.status == requests.codes.forbidden or \ response.status == requests.codes.unauthorized: ex = error.AuthorizationError() ex.url = url ex.reason = response.reason raise ex # let's save the auth object and remove the user/pass information if not self.auth and auth: self.auth = auth del self.username del self.password return response
def request(self, url, method="GET", body="", headers=None): """ Actually sends the request """ if self.proxy is not None: url = "%s://%s:%s%s" % (self.url.scheme, self.url.hostname, self.url.port, url) req_headers = dict(self.headers) req_headers.update(headers) if body is None or body == "" and "Content-Type" in req_headers: del req_headers["Content-Type"] print "--- request ---" print url for k, v in req_headers.items(): print ': '.join((k, v)) print print body print "---------------" self.handle.request(method, url, body, req_headers) print "--- response ---" r = self.handle.getresponse() response = DAVResponse(r) print response.status, response.raw print "----------------" # this is an error condition the application wants to know if response.status == httplib.FORBIDDEN or \ response.status == httplib.UNAUTHORIZED: ex = error.AuthorizationError() ex.url = url ex.reason = response.reason raise ex return response