def make_request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=False, proxies=None): """Sends an HTTP request Returns :class:`Response <models.Response>` See the requests documentation for explanation of all these parameters Currently proxies, files, and cookies are all ignored """ http = httplib2.Http(timeout=timeout) http.follow_redirects = allow_redirects if auth is not None: http.add_credentials(auth[0], auth[1]) if data is not None: udata = {} for k, v in data.iteritems(): try: udata[k.encode('utf-8')] = unicode(v).encode('utf-8') except UnicodeDecodeError: udata[k.encode('utf-8')] = unicode(v, 'utf-8').encode('utf-8') data = urlencode(udata) if params is not None: enc_params = urlencode(params, doseq=True) if urlparse(url).query: url = '%s&%s' % (url, enc_params) else: url = '%s?%s' % (url, enc_params) resp, content = http.request(url, method, headers=headers, body=data) # Format httplib2 request as requests object return Response(resp, content, url)
def make_request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=False, proxies=None): """Sends an HTTP request Returns :class:`Response <models.Response>` See the requests documentation for explanation of all these parameters Currently proxies, files, and cookies are all ignored """ http = httplib2.Http(timeout=timeout, ca_certs=get_cert_file()) http.follow_redirects = allow_redirects if auth is not None: http.add_credentials(auth[0], auth[1]) if data is not None: udata = {} for k, v in iteritems(data): key = k.encode('utf-8') if isinstance(v, (integer_types, binary_type)): udata[key] = v elif isinstance(v, string_types): udata[key] = v.encode('utf-8') else: raise ValueError('data should be an integer, ' 'binary, or string') data = urlencode(udata) if params is not None: enc_params = urlencode(params, doseq=True) if urlparse(url).query: url = '%s&%s' % (url, enc_params) else: url = '%s?%s' % (url, enc_params) resp, content = http.request(url, method, headers=headers, body=data) # Format httplib2 request as requests object return Response(resp, content.decode('utf-8'), url)
def make_request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=False, proxies=None): """Sends an HTTP request :param str method: The HTTP method to use :param str url: The URL to request :param dict params: Query parameters to append to the URL :param dict data: Parameters to go in the body of the HTTP request :param dict headers: HTTP Headers to send with the request :param float timeout: Socket/Read timeout for the request :return: An http response :rtype: A :class:`Response <models.Response>` object See the requests documentation for explanation of all these parameters Currently proxies, files, and cookies are all ignored """ http = httplib2.Http( timeout=timeout, ca_certs=get_cert_file(), proxy_info=Connection.proxy_info(), ) http.follow_redirects = allow_redirects if auth is not None: http.add_credentials(auth[0], auth[1]) def encode_atom(atom): if isinstance(atom, (integer_types, binary_type)): return atom elif isinstance(atom, string_types): return atom.encode('utf-8') else: raise ValueError('list elements should be an integer, ' 'binary, or string') if data is not None: udata = {} for k, v in iteritems(data): key = k.encode('utf-8') if isinstance(v, (list, tuple, set)): udata[key] = [encode_atom(x) for x in v] elif isinstance(v, (integer_types, binary_type, string_types)): udata[key] = encode_atom(v) else: raise ValueError('data should be an integer, ' 'binary, or string, or sequence ') data = urlencode(udata, doseq=True) if params is not None: enc_params = urlencode(params, doseq=True) if urlparse(url).query: url = '%s&%s' % (url, enc_params) else: url = '%s?%s' % (url, enc_params) resp, content = http.request(url, method, headers=headers, body=data) # Format httplib2 request as requests object return Response(resp, content.decode('utf-8'), url)