使用POST请求和图形API发布到用户的墙上

时间:2012-06-06 11:51:13

标签: java facebook facebook-graph-api servlets

我是Facebook应用程序开发的新手,我一直试图在用户的墙上发布一条简单的消息。我设法获取访问令牌。这是POST请求的代码。我正在使用java servlets

  String data = URLEncoder.encode("access_token", "UTF-8") + "=" + URLEncoder.encode(accessToken, "UTF-8");
data += "&" + URLEncoder.encode("message", "UTF-8") + "=" + URLEncoder.encode("finally", "UTF-8");
out.println("data is\n"+data);
// Send data
String u="https://graph.facebook.com/me/feed";
URL urls = new URL(u);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

那么这段代码不起作用,我不能发布在墙上。关于我可能出错的地方有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我很确定这是因为你没有指定application/x-www-form-urlencoded内容类型,试试这个:

URLConnection connection = new URL("https://graph.facebook.com/me/feed").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(data);
out.flush();
out.close()

修改

好的,所以还有两件事可能导致这个问题:

  1. 您还需要指定内容长度。
  2. 您可能需要阅读回复以使其计数..
  3. 此代码经过测试且有效:

    StringBuffer buffer = new StringBuffer();
    buffer.append("access_token").append('=').append(ACCESS_TOKEN);
    buffer.append('&').append("message=").append('=').append("YO!");
    String content = buffer.toString();
    
    URLConnection connection = new URL("https://graph.facebook.com/me/feed").openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestProperty("Content-Length", Integer.toString(content.length()));
    
    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    out.writeBytes(content);
    out.flush();
    out.close();
    
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) { 
        System.out.println(inputLine);
    }
    
    in.close();