Microsoft 认知服务 - 身份验证问题,无法获取访问令牌
Microsoft Cognitive Services - Authentication Issues, Unable to get Access Token
我正在尝试从 android 调用 ms 认知服务。但是,获取访问令牌的 api 不起作用。下面是 android 代码
HttpPost httpPost = new HttpPost("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("Ocp-Apim-Subscription-Key", "my subscription key"));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
}
try {
HttpResponse response = httpClient.execute(httpPost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在 logcat 中,我收到错误:
java.net.UnknownHostException: Unable to resolve host "api.cognitive.microsoft.com": No address associated with hostname
apiurl“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”有什么变化吗?
此外,当我在浏览器中键入此 URL“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”时,我收到消息
{ "statusCode": 404, "message": "Resource not found" }
请帮忙。
据我所知,apiurlhttps://api.cognitive.microsoft.com/sts/v1.0/issueToken
没有任何变化,与link.[=17=中描述的内容相同]
我尝试通过工具Postman
调用api,成功获取token,如下。
您无法通过在浏览器中输入 url 获得您希望的结果,因为 api 调用是一个 POST 请求,而不是通过 nagetive a [ 的 GET 请求=33=] 在浏览器中。
根据您的代码,问题似乎是由于缺少所需的内容长度引起的 Content-Length: 0
。
作为参考,这是我的示例代码。
URL url = new URL("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestProperty("Ocp-Apim-Subscription-Key", "XXXXXXXX");
conn.setRequestMethod("POST");
conn.setDoOutput(true); // Must set do output true
conn.setFixedLengthStreamingMode(0); // Set Content-Length 0
conn.connect();
int code = conn.getResponseCode();
String msg = conn.getResponseMessage();
System.out.println(code+"\t"+msg);
IOUtils.copy(conn.getInputStream(), System.out);
以上代码的响应如下。
200 OK
eyXXXXXXXXXXXXXXXXXXXXXXXXXX
我正在尝试从 android 调用 ms 认知服务。但是,获取访问令牌的 api 不起作用。下面是 android 代码
HttpPost httpPost = new HttpPost("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("Ocp-Apim-Subscription-Key", "my subscription key"));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
}
try {
HttpResponse response = httpClient.execute(httpPost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在 logcat 中,我收到错误:
java.net.UnknownHostException: Unable to resolve host "api.cognitive.microsoft.com": No address associated with hostname
apiurl“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”有什么变化吗?
此外,当我在浏览器中键入此 URL“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”时,我收到消息
{ "statusCode": 404, "message": "Resource not found" }
请帮忙。
据我所知,apiurlhttps://api.cognitive.microsoft.com/sts/v1.0/issueToken
没有任何变化,与link.[=17=中描述的内容相同]
我尝试通过工具Postman
您无法通过在浏览器中输入 url 获得您希望的结果,因为 api 调用是一个 POST 请求,而不是通过 nagetive a [ 的 GET 请求=33=] 在浏览器中。
根据您的代码,问题似乎是由于缺少所需的内容长度引起的 Content-Length: 0
。
作为参考,这是我的示例代码。
URL url = new URL("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestProperty("Ocp-Apim-Subscription-Key", "XXXXXXXX");
conn.setRequestMethod("POST");
conn.setDoOutput(true); // Must set do output true
conn.setFixedLengthStreamingMode(0); // Set Content-Length 0
conn.connect();
int code = conn.getResponseCode();
String msg = conn.getResponseMessage();
System.out.println(code+"\t"+msg);
IOUtils.copy(conn.getInputStream(), System.out);
以上代码的响应如下。
200 OK
eyXXXXXXXXXXXXXXXXXXXXXXXXXX