Я пытаюсь использовать 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. Создание подписи и добавление заголовка было сделано путем следования документации из твиттера