【问题标题】:Instagram API error 500 UTF-8 hashtags with enforced signatureInstagram API 错误 500 个带有强制签名的 UTF-8 主题标签
【发布时间】:2015-08-23 19:40:17
【问题描述】:

我从一个简单的 instagram GET 请求中收到 500 错误。当主题标签包含正常的 ascii 字符时,或者当我的应用程序未选中“强制签名请求”复选框时,我的代码可以工作。但是当我尝试使用 utf8 主题标签并强制执行签名请求时,我什么也做不了。我看到签名的请求很快就会成为强制性的,所以我需要它来工作。我想获取像 #über 这样的标签的所有图像。

public static String signRequest(String key, String data) throws Exception {
    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
    sha256_HMAC.init(secret_key);
    return Hex.encodeHexString(sha256_HMAC.doFinal(data.getBytes("UTF-8")));
}

public static void getLatestImagesForHashtag(String hashtag, String client_id, String secret) throws Exception {
    String endpoint = "/tags/" + URLEncoder.encode(hashtag, "UTF-8") + "/media/recent";
    String request_data = endpoint + "|client_id=" + client_id;
    System.out.println("SIGNING DATA: " + request_data);
    String signature = InstagramUtil.signRequest(secret, request_data);
    System.out.println("SIG VAL: " + signature);
    String url = "https://api.instagram.com/v1" + endpoint + "?client_id=" + client_id + "&sig=" + signature;
    URL obj;
    try {
        obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        //Blah blah blah

我得到的回应

Info:   SIGNING DATA: /tags/%C3%BCber/media/recent|client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Info:   SIG VAL: 503fd3fb7072eea8284576940b3fe75125a5bbbd9f505f22507776cbb6760d5d
Info:   Sending 'GET' request to URL : https://api.instagram.com/v1/tags/%C3%BCber/media/recent?client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&sig=503fd3fb7072eea8284576940b3fe75125a5bbbd9f505f22507776cbb6760d5d
Info:   Response Code : 500
Info:   Response Msg : INTERNAL SERVER ERROR

数据响应是:糟糕,发生错误。

我尝试了许多不同的组合,在端点和签名数据中对主题标签进行编码。如果是签名问题,我收到 500 错误而不是 403 很奇怪。我在编码方面做错了吗?

【问题讨论】:

  • 我遇到了完全相同的问题,我刚刚在 instagram 的 bug 工具上打开了一个 bug。希望他们尽快回答。
  • 大约一个月前我还向 instagram 提交了错误报告,但不幸的是他们没有回复。他们实际上说如果他们需要更多信息,他们“可能”会联系你。所以我只能假设他们不需要更多信息并且正在努力修复。
  • 您确定signRequest 中的字符串是人类可读的文本吗?在那里你可以尝试“ISO-8859-1”。如果字符串被滥用以包含二进制字节。错误的 String 用法 i.o. byte[] 产生问题并且性能较差。
  • 这是一个错误。签名请求由密钥(静态字符串)、端点和客户端 ID 组成。问题是即使 url 正确转义,端点中的 utf8 字符也没有得到正确处理。该错误现已修复。

标签: jakarta-ee utf-8 instagram urlencode instagram-api


【解决方案1】:

我刚刚收到来自 Instagram 的消息,告诉我这确实是一个错误,现在已修复! \o/

您好,感谢您对 Instagram 平台的报告和关注。这 问题已得到修复。最好的,杰基 - Instagram 团队

【讨论】:

    【解决方案2】:

    我认为这个问题显然是 Instagram API 的错误。
    我测试了各种请求模式。

    “强制执行签名请求”已启用

    /v1/tags/search?access_token=<access token>&q=%e3%81%82&sig=<correct sig>
    

    -> 500(预计 200)

    /v1/tags/search?access_token=<access token>&q=%e3%81%82&sig=<incorrect sig>
    

    -> 500(预期为 403)

    /v1/tags/search?access_token=<access token>&q=%e3%81%82
    

    -> 403(如预期)

    /v1/tags/search?access_token=<access token>&q=abc&sig=<correct sig>
    

    -> 200(如预期)

    “强制签名请求”已禁用

    /v1/tags/search?access_token=<access token>&q=%e3%81%82&sig=<correct sig>
    

    -> 200(如预期)

    /v1/tags/search?access_token=<access token>&q=%e3%81%82&sig=<incorrect sig>
    

    -> 403(如预期)

    启用“强制签名请求”时,在其 uri 中包含非 ascii utf-8 字符的请求总是得到 500。如果关闭它,一切正常。这显然不是由不正确的 sig 参数或错误编码引起的问题。
    我已经在 10 天前通过 bugtool 向 Instagram 报告了这个问题。到目前为止,他们没有任何反应。
    (抱歉再次回答。我的第一个答案已被删除。)

    [UPDATE 5 Sep.]
    终于,这个问题似乎得到了解决。强>
    我的 IG 应用现在可以在 Enforce Signed Requests 设置下正常工作。
    注意:如果端点 uri 有 url 编码的字符(例如 /tags/%E3%81%82/media/recent),您需要从解码的端点字符串生成 sig 参数。

    【讨论】:

    • 是的,它现在可以工作了,太好了。我也收到了他们的电子邮件:)
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多