2016-12-17 197 views
0

我想從android調用ms認知服務。然而,API來獲得訪問令牌不工作..下面是Android代碼Microsoft認知服務 - 身份驗證問題,無法獲取訪問令牌

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

是否有任何改變API URL「 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" } 

請幫助。

+0

在應用程序方面,有關「無法解析主機」api.cognitive.microsoft.com「」 - 檢查防火牆/ dns。在瀏覽器中,行爲是正確的,只要GET什麼也不做 - 你應該在那裏獲取一個令牌。 – mikalai

+0

我證實沒有任何阻止請求..沒有在防火牆/ DNS。感謝您的建議。任何更多的想法。 –

+0

所以這是一個錯字? – mikalai

回答

1

據我所知,api url https://api.cognitive.microsoft.com/sts/v1.0/issueToken沒有任何變化,與link中描述的內容相同。

我試圖通過工具Postmanenter image description here調用API,併成功獲得令牌,如下所示。

由於api調用是一個POST請求,而不是通過瀏覽器中的一個URL訪問GET請求,所以無法通過瀏覽器中的類型url獲得結果。

根據你的代碼,似乎這個問題是由於缺少所需的內容長度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 
+0

我試過了你分享的代碼,我得到錯誤:「12-21 17:18:33.063:W/System.err(5372):java.net.UnknownHostException:無法解析主機」api.cognitive.microsoft。 com「:沒有與主機名關聯的地址 」 –

+1

潘 - 我的壞,有一個錯字。您的解決方案運作完美。非常感謝您的詳細解釋。讚賞。 –

相關問題