错误86此方法需要使用AppEngine中的Java在Twitter Rest API 1.1上使用Bearer令牌进行GET或HEAD

时间:2014-04-13 08:09:48

标签: java google-app-engine twitter

根据Twitter说明https://dev.twitter.com/docs/auth/application-only-auth,我有我的bearerToken和userID,我想要一个关注者列表。

我收到错误86,这不在错误代码列表https://dev.twitter.com/docs/error-codes-responses

任何指针都会受到赞赏。

public String getTwitterFriends(String userID, String bearerToken) {
    // Use App Bearer token to get public friends
    String answer = "";
    String param = "count=5000&cursor=-1&user_id=" + userID;
    HttpURLConnection connection = null;
    try {
        // String request =
        // "https://api.twitter.com:443/1.1/friends/ids.json?" + param;
        String request = "https://api.twitter.com/1.1/friends/ids.json?"
                + param;
        URL url = new URL(request);
        connection = (HttpURLConnection) url.openConnection();
        System.setProperty("http.keepAlive", false ? "true" : "false");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("GET");
        // connection.setRequestProperty("Host", "api.twitter.com" +
        // ":443");
        connection.setRequestProperty("Host", "api.twitter.com");
        connection.setRequestProperty("Accept", "*/*");
        connection.setRequestProperty("Authorization", "Bearer "
                + bearerToken);
        connection.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=utf-8");
        connection.setRequestProperty("User-Agent", "UnhappyChappy");
        // connection.setRequestProperty("Accept-Encoding", "gzip");
        // connection.setRequestProperty("Content-Length", "" +
        // Integer.toString(param.getBytes().length));
        connection.setUseCaches(false);
        DataOutputStream wr = new DataOutputStream(
                connection.getOutputStream());
        // wr.writeBytes(param);
        wr.flush();
        wr.close();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        StringBuilder str = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
            str.append(line);
        }
        reader.close();
        connection.disconnect();
        answer = str.toString();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(answer);
    return answer;
}   

1 个答案:

答案 0 :(得分:0)

这是我发布GET的方式。我不得不在App Engine上更低级别并使用FetchOptions这对我有用,希望它能帮助其他人。

        URL url = new URL(request);

        HTTPRequest req = new HTTPRequest(url, HTTPMethod.GET);
        req.addHeader(new HTTPHeader("Authorization", "Bearer " + bearerToken));

        HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(req);
        System.out.println(new String(response.getContent()));