Интеграция Rest API из Media Wiki с Spring Boot - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь интегрировать различные API, предоставляемые MediaWiki, в свой проект SpringBoot. До сих пор я пытался использовать его Login API. Подробности см. В этом документе: https://www.mediawiki.org/wiki/API: Login

Но я получаю такую ​​ошибку.

{
"warnings": {
    "main": {
        "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes. Use [[Special:ApiFeatureUsage]] to see usage of deprecated features by your application."
    },
    "login": {
        "*": "Fetching a token via \"action=login\" is deprecated. Use \"action=query&meta=tokens&type=login\" instead."
    }
},
"login": {
    "result": "NeedToken",
    "token": "2c217d741ad4035d6ca51ac5185756ef5eb52ca0+\\"
}
} 

Хотя я передаю токен перед нажатием вызов после входа в систему. Пожалуйста, обратитесь к моему коду

//fetching token for the post call.
    ResponseEntity<TokenResponse> tokenResponse =
            new RestTemplate().getForEntity("https://en.wikipedia.org/w/api.php?action=query&meta=tokens&type=login&format=json"
                    , TokenResponse.class);
    if (tokenResponse.getStatusCode().is2xxSuccessful()) {
        //get the token from the response
        String logintoken = tokenResponse.getBody().getQuery().getTokens().get("logintoken");
        String cookies = tokenResponse.getHeaders().get(HttpHeaders.SET_COOKIE).stream().collect(Collectors.joining(";"));

        //now do the post login request
        String serviceUrl = prepareURL(loginWikiRequest.getUserName(), loginWikiRequest.getPassword(), logintoken);
        LoginRequest loginRequest = new LoginRequest();
        loginRequest.setLgpassword(loginWikiRequest.getPassword());
        loginRequest.setLgtoken(logintoken);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Cookie", cookies);
        HttpEntity requestEntity = new HttpEntity(loginRequest, httpHeaders);
        ResponseEntity<HashMap> loginResponse = new RestTemplate().exchange(serviceUrl, HttpMethod.POST, requestEntity, HashMap.class);
        return loginResponse.getBody();
    } else {
        return null;
    }

Я просмотрел эту ошибку в Google, и причиной, которую я смог найти, является неправильное управление сеансом или обработка сломанных файлов cookie. Но я не могу понять, как это исправить. Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...