我正在尝试使用Twitter的好友列表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,它们都会给我同样的错误。
我什至试图像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上的文档进行签名并添加页眉