code: def http_query(self, method, path, data={}, params={}, timeout=300):
          
          data = json.dumps(data)
          if timeout is None:
              timeout = 60 * 60 * 24 * 31  # One month timeout
  
          if path == 'version':
              url = "http://docker/v1.12/" + path         # API of docker v1.0
          else:
              url = "http://docker/v" + DOCKER_MINIMUM_API_VERSION + "/" + path
          try:
              if path != "version":  # version is use by check connection
                  yield from self._check_connection()
              if self._session is None or self._session.closed:
                  connector = self.connector()
                  self._session = aiohttp.ClientSession(connector=connector)
              response = yield from self._session.request(
                  method,
                  url,
                  params=params,
                  data=data,
                  headers={"content-type": "application/json", },
                  timeout=timeout
              )
          except (aiohttp.ClientResponseError, aiohttp.ClientOSError) as e:
              raise DockerError("Docker has returned an error: {}".format(str(e)))
          except (asyncio.TimeoutError):
              raise DockerError("Docker timeout " + method + " " + path)
          if response.status >= 300:
              body = yield from response.read()
              try:
                  body = json.loads(body.decode("utf-8"))["message"]
              except ValueError:
                  pass
              log.debug("Query Docker %s %s params=%s data=%s Response: %s", method, path, params, data, body)
              if response.status == 304:
                  raise DockerHttp304Error("Docker has returned an error: {} {}".format(response.status, body))
              elif response.status == 404:
                  raise DockerHttp404Error("Docker has returned an error: {} {}".format(response.status, body))
              else:
                  raise DockerError("Docker has returned an error: {} {}".format(response.status, body))
          return response
docs: Make a query to the docker daemon
  
          :param method: HTTP method
          :param path: Endpoint in API
          :param data: Dictionnary with the body. Will be transformed to a JSON
          :param params: Parameters added as a query arg
          :param timeout: Timeout
          :returns: HTTP response