【发布时间】: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