使用OAuth 1.0请求Twitter API

时间:2019-06-17 08:44:41

标签: java spring-boot twitter twitter-oauth

我正在尝试使用Twitter的好友列表api,并且成功地使用了没有任何参数。

但是,无论何时添加参数,都会出现错误“无法验证您的身份”。而且我别无选择,只能在好友列表过长时添加一个cursor参数。

我在调用api时没有任何参数的情况下会得到朋友的用户列表,这使我认为对请求进行身份验证可以正常工作。

我尝试将请求url更改为https://api.twitter.com/1.1/friends/list.json?cursor=-1,这给了我验证错误。

我尝试同时使用https://api.twitter.com/1.1/friends/list.jsonhttps://api.twitter.com/1.1/friends/list.json?cursor=-1来制作oauth_signature,但它们都使我失败了。

我尝试使用不同的参数,例如screen_name或user_id,它们都会给我同样的错误。

我什至试图像POST请求一样添加cursor: -1标头,但这也不起作用。

现在我的代码看起来像这样

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的代码。遵循twitter上的文档进行签名并添加页眉

0 个答案:

没有答案