code: public Map<String, Object> obtainRequestToken(SocialLoginConfig config, String callbackUrl) {
  
          String endpointUrl = config.getRequestTokenUrl();
          try {
              SocialUtil.validateEndpointWithQuery(endpointUrl);
          } catch (SocialLoginException e) {
              return createErrorResponse("TWITTER_BAD_REQUEST_TOKEN_URL", new Object[] { endpointUrl, TwitterLoginConfigImpl.KEY_requestTokenUrl, config.getUniqueId(), e.getLocalizedMessage() });
          }
  
          // Create the Authorization header string necessary to authenticate the request
          String authzHeaderString = createAuthzHeaderForRequestTokenEndpoint(callbackUrl, endpointUrl);
          if (tc.isDebugEnabled()) {
              Tr.debug(tc, "Authz header string: " + authzHeaderString);
          }
  
          return executeRequest(config, requestMethod, authzHeaderString, endpointUrl, TwitterConstants.TWITTER_ENDPOINT_REQUEST_TOKEN, null);
      }
docs: Invokes the {@value TwitterConstants#TWITTER_ENDPOINT_REQUEST_TOKEN} endpoint in order to obtain a request token. The
  request is authorized for the consumer key set by the class and the callback URL provided to the method. The appropriate
  consumer key must be set before invoking this method in order to obtain a request token for the correct consumer. For more
  information, see {@link https://dev.twitter.com/oauth/reference/post/oauth/request_token}.
  
  @param config
  @param callbackUrl
  @return