今天开始准备调用极光推送的REST API发现报了很多错。postman和idea都试过了
报错1: post请求接口,返回{"code":9010,"content":"missing auth"}
出这个错,请仔细查看官方文档https://docs./jverification/server/rest_api/rest_api_summary/
鉴权方式
极光 REST API采用 HTTP 基本认证的验证方式。基本做法为,HTTP Header 中加 Authorization:
Authorization: Basic ${base64_auth_string}
Header 名称是 "Authorization", 值是 base64转换过的 "appKey:masterSecret"(中间有个冒号)。这两者可以在极光开发者服务的Web控制台[应用设置]-[应用信息]中查看。
报错2:
{
}
出现这个错误,十有八九是你通过postMan请求,把Authorization放到header里面了。。。具体的做法如图
而不是直接在headers里面加个Content-Type:application/json
Authorization Basic MDQzNDdkNDU5Y2QwODZhOTFjNWRlNjU1OjY5YThmODM4ZGV-----------------------
官方给出的解释是:文档里面提供的方式是restapi的方式,postmen是封装好了的
post此时应该可以请求了。
那么java代码怎么写呢?
* @Description 极光推送专用post * @Author PrinceCharmingDong public static String doPostForJpush (String url, String JSONBody,String appKey,String masterKey) { CloseableHttpResponse response = null; CloseableHttpClient httpClient = null; String responseContent = ""; httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Content-Type", "application/json"); httpPost.addHeader("Authorization", "Basic " + Base64.getUrlEncoder() .encodeToString((appKey+ ":" + masterKey).getBytes())); httpPost.setEntity(new StringEntity(JSONBody)); response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); responseContent = EntityUtils.toString(entity, "UTF-8"); System.out.println(responseContent); } catch (ClientProtocolException e) { } catch (IOException e) { close(response, httpClient); private static void close(Closeable... closeables) { if (closeables != null && closeables.length > 0) { for (Closeable closeable : closeables) { } catch (IOException e) {
JSONBody是
{
"loginToken":"v3NMGQPG4x7XkKDEazzhJHoY-JdZfilhodyW5bV2U8C8pUxoCRnRoi3lkUQKjUJKD31pxPJRcO2PEdGEs04jRRbC3kHdDl5tLkACD-_I_NtcMOsEXtl3e7xnz8KpcxracnX_iXI6CPIJ5wBY9WfYaPtp30zdEy7ffcOk2F5NyWFKeup1y1k4s8aWsfGulFffE8Mzd7uQMmjCaYBm9x-------------"
}
这样子的。
至于请求返回的数据怎么处理,你应该会将 json 字符串转为 java bean,然后获取里面的内容。此处不过多赘述
报错3:
{
"id": 287637091930615808,
"code": 9003,
"content": "token expired or not exist",
"exID": null,
"phone": null
}
这个很明显了,loginToken是一次性的,用了就没了,叫客户端再给个loginToken给你。
|