code: def login(self):
          
  
          if self.has_cookies() and \
                  (not self.username and not self.password):
              # If we were passed session cookie(s), but no username or
              # password, then login is a nop, since we're automatically
              # logged in.
              return
  
          if self.token is not _NoAuthenticationToken and \
                  (not self.username and not self.password):
              # If we were passed a session token, but no username or
              # password, then login is a nop, since we're automatically
              # logged in.
              return
  
          if self.basic and (self.username and self.password):
              # Basic auth mode requested, so this method is a nop as long
              # as credentials were passed in.
              return
  
          # Only try to get a token and updated cookie if username & password are specified
          try:
              response = self.http.post(
                  self.authority + self._abspath("/services/auth/login"),
                  username=self.username,
                  password=self.password,
                  headers=self.additional_headers,
                  cookie="1") # In Splunk 6.2+, passing "cookie=1" will return the "set-cookie" header
  
              body = response.body.read()
              session = XML(body).findtext("./sessionKey")
              self.token = "Splunk %s" % session
              return self
          except HTTPError as he:
              if he.status == 401:
                  raise AuthenticationError("Login failed.", he)
              else:
                  raise
docs: Logs into the Splunk instance referred to by the :class:`Context`
          object.
  
          Unless a ``Context`` is created with an explicit authentication token
          (probably obtained by logging in from a different ``Context`` object)
          you must call :meth:`login` before you can issue requests.
          The authentication token obtained from the server is stored in the
          ``token`` field of the ``Context`` object.
  
          :raises AuthenticationError: Raised when login fails.
          :returns: The ``Context`` object, so you can chain calls.
  
          **Example**::
  
              import splunklib.binding as binding
              c = binding.Context(...).login()
              # Then issue requests...