docs: def _requestAssociation(self, endpoint, assoc_type, session_type):
          """Make and process one association request to this endpoint's
          OP endpoint URL.
  
          @returns: An association object or None if the association
              processing failed.
  
          @raises ServerError: when the remote OpenID server returns an error.
          """
          assoc_session, args = self._createAssociateRequest(
              endpoint, assoc_type, session_type)
  
          try:
              response = self._makeKVPost(args, endpoint.server_url)
          except fetchers.HTTPFetchingError, why:
              logging.exception('openid.associate request failed: %s' % (why[0],))
              return None
  
          try:
              assoc = self._extractAssociation(response, assoc_session)
          except KeyError, why:
              logging.exception('Missing required parameter in response from %s: %s'
                          % (endpoint.server_url, why[0]))
              return None
          except ProtocolError, why:
              logging.exception('Protocol error parsing response from %s: %s' % (
                  endpoint.server_url, why[0]))
              return None
          else:
              return assoc