def test_proxy_info(http_mock, resp_mock): http = Mock() http.request.return_value = (Mock(), Mock()) http_mock.return_value = http Connection.set_proxy_info( 'example.com', 8080, proxy_type=PROXY_TYPE_SOCKS5, ) make_request("GET", "http://httpbin.org/get") http_mock.assert_called_with(timeout=None, ca_certs=ANY, proxy_info=ANY) http.request.assert_called_with("http://httpbin.org/get", "GET", body=None, headers=None) proxy_info = http_mock.call_args[1]['proxy_info'] assert_equal(proxy_info.proxy_host, 'example.com') assert_equal(proxy_info.proxy_port, 8080) assert_equal(proxy_info.proxy_type, PROXY_TYPE_SOCKS5)
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)