2012-03-22 84 views
4

当我试图制作一个图形API调用Facebook时出现以下错误。我知道我的回调网址是好的,因为当我在facebook调试器中测试它时,它可以很好地查看页面。我也在使用Google App Engine,并且我真的认为这个错误可能与从Facebook访问我的GAE应用程序的异步调用有关,而使得URL提取的线程处于活动状态等待回复。脸书“无法从URL检索数据”

错误:

{"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抓取操作的?如果导致问题,我还会增加连接的超时时间。不知道它是否相关,但我认为这是来自facebook linter的完全通用错误,因此可能意味着该调用本身存在问题。

此外,我可以看到Facebook的linter回调我的GAE应用程序在日志中,我没有看到任何错误,在该响应。

编辑:好吧,这显然是一个超时问题。我注意到,当一个新的GAE实例没有在facebook linter回调中启动时,它可以正常工作。当一个新的GAE实例启动时,它需要50秒左右的时间。我会在10秒内从Facebook返回错误。因此,无论是Facebook linter还是GAE URL抓取,这段时间都会超时。

回答

0

我在nimbits.com上从GAE一直写给FB的FB - 不用担心。

此代码:

服务器端的Facebook默认地将Impl:

https://github.com/bsautner/com.nimbits/blob/master/nimbits-tds/src/com/nimbits/server/external/facebook/FacebookImpl.java

这是我得心应手HTTP POST和得到帮助类在GAE上的作品,并在上面的代码中被引用:

https://github.com/bsautner/com.nimbits/blob/master/nimbits-model/src/com/nimbits/server/http/HttpCommonImpl.java