尝试对 facebook 进行图形 API 调用时出现以下错误。我知道我的回调 url 很好,因为当我在 facebook 调试器中测试它时,它可以很好地查看页面。我也在使用 Google App Engine,我真的认为这个错误可能与从 facebook 返回到我的 GAE 应用程序的异步调用有关,而进行 URL Fetch 的线程仍然处于事件状态等待回复。
错误:
{"error":{"type":"Exception","message":"Could not retrieve data from URL."}}
我的调用代码:
URL url = new URL("https://graph.facebook.com/me/");
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setConnectTimeout(30000);
OutputStreamWriter writer = new OutputStreamWriter(
connection.getOutputStream());
writer.write("access_token=" + access_token + "&activity=" + ogpUrl);
writer.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
log.info("GraphApiHelper: success stream");
} else {
log.severe("GraphApiHelper: error stream: "
+ connection.getResponseMessage());
}
有什么想法可能导致这种情况,或者 GAE 在这些类型的 URL Fetch 上是否表现异常?我还增加了连接超时,以防导致问题。不确定它是否相关,但我认为这是来自 facebook linter 的完全一般性错误,因此它可能意味着调用本身存在问题。
此外,我可以在日志中看到 Facebook linter 正在对我的 GAE 应用程序进行回调,并且我在该响应中没有看到任何错误。
编辑:好的,这显然是一个超时问题。我注意到当 facebook linter 回调中没有启动新的 GAE 实例时,它可以正常工作。当启动一个新的 GAE 实例时,需要 50 秒左右的时间。我在 10 秒内从 Facebook 收到错误信息。因此,在那个时期,无论是 facebook linter 还是 GAE URL Fetch,都会出现超时。
最佳答案
我一直在 nimbits.com 上从 GAE 写信给 FB - 不用担心。
此代码有效:
服务器端 Facebook 实现:
这是我方便的 http post 和 get helper 类,它在 GAE 上工作并在上面的代码中被引用:
关于 Facebook "could not retrieve data from URL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815701/