docstr: Perform requests.
  
  :param method: http request method
  :param url: http request url
  :param query_params: query parameters in the url
  :param headers: http request headers
  :param body: request json body, for `application/json`
  :param post_params: request post parameters,
                      `application/x-www-form-urlencoded`
                      and `multipart/form-data`
  :param _preload_content: if False, the urllib3.HTTPResponse object will
                           be returned without reading/decoding response
                           data. Default is True.
  :param _request_timeout: timeout setting for this request. If one
                           number provided, it will be total request
                           timeout. It can also be a pair (tuple) of
                           (connection, read) timeouts.
docstr_tok: ["Perform","requests",".",":","param","method",":","http","request","method",":","param","url",":","http","request","url",":","param","query_params",":","query","parameters","in","the","url",":","param","headers",":","http","request","headers",":","param","body",":","request","json","body",",","for","`","application\/json","`",":","param","post_params",":","request","post","parameters",",","`","application\/x-www-form-urlencoded","`","and","`","multipart\/form-data","`",":","param","_preload_content",":","if","False",",","the","urllib3.HTTPResponse","object","will","be","returned","without","reading\/decoding","response","data",".","Default","is","True",".",":","param","_request_timeout",":","timeout","setting","for","this","request",".","If","one","number","provided",",","it","will","be","total","request","timeout",".","It","can","also","be","a","pair","(","tuple",")","of","(","connection",",","read",")","timeouts","."]
code: def request(
      self,
      method,
      url,
      query_params=None,
      headers=None,
      body=None,
      post_params=None,
      _preload_content=True,
      _request_timeout=None,
  ):
      """Perform requests.
  
      :param method: http request method
      :param url: http request url
      :param query_params: query parameters in the url
      :param headers: http request headers
      :param body: request json body, for `application/json`
      :param post_params: request post parameters,
                          `application/x-www-form-urlencoded`
                          and `multipart/form-data`
      :param _preload_content: if False, the urllib3.HTTPResponse object will
                               be returned without reading/decoding response
                               data. Default is True.
      :param _request_timeout: timeout setting for this request. If one
                               number provided, it will be total request
                               timeout. It can also be a pair (tuple) of
                               (connection, read) timeouts.
      """
      method = method.upper()
      assert method in [
          "GET",
          "HEAD",
          "DELETE",
          "POST",
          "PUT",
          "PATCH",
          "OPTIONS",
      ]
  
      if post_params and body:
          raise ValueError(
              "body parameter cannot be used with post_params parameter."
          )
  
      post_params = post_params or {}
      headers = headers or {}
  
      timeout = None
      if _request_timeout:
          if isinstance(
              _request_timeout, (int,) if six.PY3 else (int, long)
          ):  # noqa: E501,F821
              timeout = urllib3.Timeout(total=_request_timeout)
          elif (
              isinstance(_request_timeout, tuple)
              and len(_request_timeout) == 2
          ):
              timeout = urllib3.Timeout(
                  connect=_request_timeout[0], read=_request_timeout[1]
              )
  
      try:
          # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
          if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
              if query_params:
                  url += "?" + urlencode(query_params)
              if re.search(
                  "json", headers["Content-Type"], re.IGNORECASE
              ):
                  request_body = None
                  if body is not None:
                      request_body = json.dumps(body)
                  r = self.pool_manager.request(
                      method,
                      url,
                      body=request_body,
                      preload_content=_preload_content,
                      timeout=timeout,
                      headers=headers,
                  )
              elif (
                  headers["Content-Type"]
                  == "application/x-www-form-urlencoded"
              ):  # noqa: E501
                  r = self.pool_manager.request(
                      method,
                      url,
                      fields=post_params,
                      encode_multipart=False,
                      preload_content=_preload_content,
                      timeout=timeout,
                      headers=headers,
                  )
              elif headers["Content-Type"] == "multipart/form-data":
                  # must del headers['Content-Type'], or the correct
                  # Content-Type which generated by urllib3 will be
                  # overwritten.
                  del headers["Content-Type"]
                  r = self.pool_manager.request(
                      method,
                      url,
                      fields=post_params,
                      encode_multipart=True,
                      preload_content=_preload_content,
                      timeout=timeout,
                      headers=headers,
                  )
              # Pass a `string` parameter directly in the body to support
              # other content types than Json when `body` argument is
              # provided in serialized form
              elif isinstance(body, str):
                  request_body = body
                  r = self.pool_manager.request(
                      method,
                      url,
                      body=request_body,
                      preload_content=_preload_content,
                      timeout=timeout,
                      headers=headers,
                  )
              else:
                  # Cannot generate the request from given parameters
                  msg = """Cannot prepare a request message for provided
                               arguments. Please check that your arguments match
                               declared content type."""
                  raise ApiException(status=0, reason=msg)
          # For `GET`, `HEAD`
          else:
              r = self.pool_manager.request(
                  method,
                  url,
                  fields=query_params,
                  preload_content=_preload_content,
                  timeout=timeout,
                  headers=headers,
              )
      except urllib3.exceptions.SSLError as e:
          msg = "{0}\n{1}".format(type(e).__name__, str(e))
          raise ApiException(status=0, reason=msg)
  
      if _preload_content:
          r = RESTResponse(r)
  
          # In the python 3, the response.data is bytes.
          # we need to decode it to string.
          if six.PY3:
              r.data = r.data.decode("utf8")
  
          # log response body
          logger.debug("response body: %s", r.data)
  
      if not 200 <= r.status <= 299:
          raise ApiException(http_resp=r)
  
      return r
  
imports: from __future__ import absolute_import
  import io
  import json
  import logging
  import re
  import ssl
  import certifi
  import six
  from six.moves.urllib.parse import urlencode
label_desc: Use image node_id 2 for calling the RESTClientObject obj's underlying member method code with example usage: obj.request(method, url, query_params, headers, body, post_params, _preload_content, _request_timeout) and returns: r