Запрос API Twitter с помощью OAuth 1.0 - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь использовать API списка друзей в Твиттере, и мне это удалось без каких-либо параметров.

Однако всякий раз, когда я добавляю параметр, я получаю сообщение об ошибке «Не удалось аутентифицировать вас». и у меня нет выбора, кроме как добавить параметр cursor, если список друзей слишком длинный.

Тот факт, что я получаю список пользователей друзей, когда я вызываю API без каких-либо параметров, заставляет меня думать, что аутентификация запроса работает должным образом.

Я попытался изменить URL-адрес запроса на https://api.twitter.com/1.1/friends/list.json?cursor=-1, что приводит к ошибке аутентификации.

Я пытался использовать и https://api.twitter.com/1.1/friends/list.json, и https://api.twitter.com/1.1/friends/list.json?cursor=-1, чтобы сделать oauth_signature, и они оба подвели меня.

Я пытался использовать разные параметры, такие как screen_name или user_id, и все они приведут к одной и той же ошибке.

Я даже пытался добавить заголовок cursor: -1 как запрос POST, но это тоже не сработало.

Прямо сейчас мой код выглядит так

public String getFriendList() {
    String baseUrl = "https://api.twitter.com/1.1/friends/list.json";

    // Creates a map with all necessary headers
    Map<String, String> headers = createMap(); 
    headers.put("oauth_token", <OAuth token of user>);
    String signature = createSignature("GET", baseUrl, headers, <OAuth secret of user>);

    // Add oauth_signature to header
    headers.put("oauth_signature", signature);

    String body = sendGetRequest(baseUrl, headers);
    return body;
}

public String sendGetRequest(String baseUrl, Map<String, String> parameters) throws AuthException, IOException {
    try (CloseableHttpClient client = CloseableHttpClientFactory.getHttpClient()) {
        HttpGet httpGet = new HttpGet(baseUrl);

        if (parameters != null) {
            httpGet.setHeader("Authorization", createHeader(parameters));
        }

        CloseableHttpResponse response = client.execute(httpGet);

        if (response.getStatusLine().getStatusCode() != 200) {
            LOGGER.info("GET Request Failed : " + EntityUtils.toString(response.getEntity()));
            throw new Exception();
        }

        String responseBody = EntityUtils.toString(response.getEntity());
        return responseBody;
    }
}

который является рабочим кодом.

Может кто-нибудь сказать мне, где добавить параметры и что я пропустил для проверки подлинности запроса?

РЕДАКТИРОВАТЬ: Добавлен код sendGetRequest. Создание подписи и добавление заголовка было сделано путем следования документации из твиттера

...