Instagram API ошибка 500 хэштегов UTF-8 с принудительной подписью

Я получаю 500 ошибок из простого запроса GET Instagram. Мой код работает, когда хэштег содержит нормальные символы 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, если это проблема с сигнатурой. Я делаю что-то не так с кодировкой?

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 или неправильной кодировкой.
Я уже сообщал об этой проблеме в Instagram через bugtool 10 дней назад. Никакой реакции от них пока нет.
(Извините, что отвечаю снова. Мой первый ответ был удален.)

[ОБНОВЛЕНИЕ 5 сентября.]
Наконец, эта проблема, кажется, исправлена.
Мое приложение IG теперь отлично работает с настройкой Enforce Signed Requests.
Примечание. Если конечная точка URI имеет символы в кодировке URL (например, /tags/%E3%81%82/media/ недавний), вам необходимо сгенерировать параметр sig из декодированной строки конечной точки.

Я только что получил сообщение из Instagram, сообщающее, что это действительно была ошибка, и теперь она исправлена! \ О /

Привет, Спасибо за ваш отчет и интерес к платформе Instagram. Проблема была исправлена. Бест, Джеки - команда Instagram

Другие вопросы по тегам