当前位置: 首页 > 知识库问答 >
问题:

Facebook GraphJavaHttpsURLConnection返回错误400

司承业
2023-03-14

我正在尝试通过网络api从Facebook Graph下载一些数据,到目前为止一切正常,不知何故,这段代码给我的错误是400,而不是json响应

URL url = new URL(link);
URLConnection urlConn = url.openConnection();

urlConn.setRequestProperty("Content-Type", "application/json");
urlConn.setRequestProperty("Accept-Charset", "UTF-8");
urlConn.setRequestProperty("User-Agent",
            "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0");

InputStreamReader in = new InputStreamReader(urlConn.getInputStream(), StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(in);

当它到达此行时:

InputStreamReader in = new InputStreamReader(urlConn.getInputStream(), StandardCharsets.UTF_8);

它会抛出一个IOException错误,并带有以下消息:

服务器返回的HTTP响应代码:400用于URL:https://graph.facebook.com/v2.9/sear...

在chrome中打开该url会返回页面,没有错误。

-编辑-

如果它有帮助,请检查标题字段,这是它显示的内容:

{Transfer-Encoding=[chunked],x-fb-trace-id=[html" target="_blank">G1Wlv7GX9w8],null=[HTTP/1.1 400错误请求],Access-Control-Allow-Origin =[*],WWW-Authenticate =[OAuth " Facebook Platform " " invalid _ Request " "(# 613)对此api的调用已超过速率限制。"],Connection=[keep-alive],x-fb-rev=[3122154],Pragma=[no-cache],Date=[Wed,2017年6月28日15:26:45 GMT],Cache-Control=[no-store],Vary=[Accept-Encoding],Expires =[星期六,01 Jan 2000 00:00:00 GMT],X-FB-Debug=[REMOVED],facebook-api-version=[v2.9],Content-Type=[application/jsoncharset=UTF-8]}

我会理解的

对此api的调用已超出速率限制

如果它在浏览器中也不起作用

共有2个答案

姬念
2023-03-14

我试过你的代码,只要URL是正确的,它就可以完美地工作。

例如,当我从URL查询参数中删除access_token时,它给了我错误HTTP 400。

服务器为URL:https://graph.facebook.com/v2.9/me?返回了HTTP响应代码:400

如果我添加

希望你能看到你这边是否发生了类似的事情。

如果可以共享遮挡访问令牌的绝对 URL,我可以进一步调试。

-编辑-

请使用此代码调整来打印HTTP 400的原因,以便您找出根本原因。

URL url = new URL(link);
    HttpURLConnection  urlConn = (HttpURLConnection) url.openConnection();

    urlConn.setRequestProperty("Content-Type", "application/json");
    urlConn.setRequestProperty("Accept-Charset", "UTF-8");
    urlConn.setRequestProperty("User-Agent",
                "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0");

    //InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
    InputStreamReader in = null;
    if (urlConn.getResponseCode() < urlConn.HTTP_BAD_REQUEST) {
        in = new InputStreamReader(urlConn.getInputStream());
    } else {
         /* error from server */
        in = new InputStreamReader(urlConn.getErrorStream());
    }


    BufferedReader reader = new BufferedReader(in);
    System.out.println(reader.readLine());

谢谢!

裴俊迈
2023-03-14

Facebook有速率限制[1],这意味着一个用户不能向API发送太多呼叫:

每个用户每小时可以拨打200个电话。例如,如果您的应用有100个用户,这意味着您的应用可以拨打20,000个电话。这不是每个用户的限制,因此一个用户可以拨打19,000个电话,另一个用户可以拨打1,000个电话。这个限制是根据前一小时拨打的电话数量计算的。

编辑:

613号错误指的是另一条规则:

但是,错误代码:613-FQL_EC_RATE_LIMIT_EXCEEDED-流调用已超过每600秒100个调用的速率

指定平均每 6 秒最多可以执行 1 次调用。

这意味着来自浏览器的单个调用可能不会被此规则捕获,但如果您的代码发送一堆请求,它将失败。

更多信息:

[1] https://developers.facebook.com/docs/graph-api/advanced/rate-limiting

[2]关于调用脸书API的最大次数的冲突限制?

 类似资料:
  • 基类控制器里有error方法,用于api的错误消息返回输出 /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息,若要指定错误码,可以传数组,格式为['code'=>您的错误码,'msg'=>'您的错误消息'] * @param mixed $data 返回的数据 * @par

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?

  • 我试图使用Gmail API将用户设置应用到Gmail帐户,但它不断返回错误400错误请求。 我可以看到错误代码在Gmail API控制台,它来自我的服务号,所以代码不可能是如此错误,但它让我发疯,只是不能找出什么是错误的。 如果有人能给我指出正确的方向,我会非常感激。

  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第

  • JSoup-1.8.1 尝试{ Document Document=Jsoup.connect(url.get(); 返回Document.getElementsByTag(“title”).text(); }catch(异常e){ System.out.println(e); 返回null; } org.jsoup.HttpStatusExc0019: HTTP错误获取URL。状态=404, U

  • 问题内容: 在Windows 2003上按计划任务运行的Java应用程序崩溃了,没有日志或任何有助于查明情况的信息。唯一可用的信息是该应用程序返回了代码143(8F)。该错误代码是从计划的任务日志中检索到的。 有谁知道该错误代码(143)代表什么?用户注销是否有可能导致应用程序终止? 谢谢, 问题答案: JVM错误代码143表示内部字段必须有效。这是在OTN讨论论坛上讨论的。但是,结论似乎是扼杀您