【问题标题】:Posting to a user's wall using the POST request and graph API使用 POST 请求和图形 API 发布到用户的墙上
【发布时间】:2012-06-06 21:21:58
【问题描述】:

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

  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();

这个代码不起作用,我不能在墙上发帖。关于我可能错在哪里的任何建议?

【问题讨论】:

  • 不工作?你是什​​么意思?您是否遇到了异常,或者看起来还不错,但您只是没有在 facebook 上看到帖子?
  • 好吧,我没有收到任何错误。但我无法在 facebook 用户的墙上发帖。

标签: java facebook facebook-graph-api servlets


【解决方案1】:

我很确定这是因为您没有指定 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. 您可能需要阅读回复才能使其生效。

此代码已经过测试并且可以正常工作:

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();

【讨论】:

  • 它起作用了。实际上我只是在 facebook 上查看 marty hall 的书,它包括你建议的两个更正..
猜你喜欢
  • 2023-03-30
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多