2016-01-11 102 views
0

未經授權點擊該按鈕時,我收到此錯誤響應:POST呼叫bluemix對​​話框

「POST https://watson-api-explorer.mybluemix.net/dialog/api/v1/dialogs/c8e08780-b08b-4cdb-8b8c-ea118863fcd1/conversation 401(未授權)」

這裏是我的代碼:

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
</head> 

<body> 
    <button onclick="makePostCall()">Click me</button> 
    <script> 
     makePostCall = function() { 
      var username = "c0ae64ef-410a-4f74-b875-ef52dee90686"; 
      var password = "9K2q4byngzo7"; 
      var xhr = new XMLHttpRequest(); 
      xhr.open('POST', 'https://watson-api-explorer.mybluemix.net/dialog/api/v1/dialogs/c8e08780-b08b-4cdb-8b8c-ea118863fcd1/conversation', true); 
      //xhr.withCredentials = true; 
      xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://localhost:80'); 
      xhr.setRequestHeader('Access-Control-Allow-Credentials', '*'); 
      xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
      xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type', 'application/json', 'Authorization'); 
      xhr.setRequestHeader('Content-Type', 'application/json'); 
      xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + " " + password)); 
      xhr.send('{"query":{"match_all":{}}}'); 
     } 
    </script> 

</body> 

</html> 
+0

你需要做的第一個授權該請求,以便發送用戶名和密碼在頭上它可能適合你 –

回答

0

首先,你真的不應該把你的對話服務憑證發佈在代碼中。現在您已經擁有了,我建議您刪除該服務並獲得一組全新的憑據。

第二點,由於瀏覽器域跨站點限制,您的客戶端JavaScript應該在您自己的服務器上調用代理API。 https://watson-api-explorer.mybluemix.net是進入swagger文檔的入口點,它不能是你的應用程序。您可以使用swagger API,也可以使用swagger客戶端或curl等應用程序,而不使用自己的Web應用程序的基於瀏覽器的客戶端。其實這是招搖的應用程序是如何工作的,該應用程序是https://watson-api-explorer.mybluemix.net,它有代理的端點上https://watson-api-explorer.mybluemix.net

您需要充當代理,以真實的URL對於具有一個對話框服務API自己的應用程序入口點入口點在https://gateway.watsonplatform.net/dialog/api

你正在傳入一個對話框ID到你的代理中,所以你必須已經獲得了它。有兩種方法可以做到這一點。無論是阿拉創造它 -

curl -u "{username}":"{password}" -X POST \ 
     --form [email protected] \ 
     --form name=templateName \ 
     "https://gateway.watsonplatform.net/dialog/api/v1/dialogs" 

或通過詢問對話框的ALA列表 -

curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/dialog/api/v1/dialogs" 

兩種方式都要求您提供服務的憑證。所以他們應該沒問題。

一旦你有你的架構排序談話API是

curl -u "{username}":"{password}" \ 
    -X POST 
    --form conversation_id={conversation_id} 
    --form client_id={client_id} 
    --form input="Hi Hello" 
    "https://gateway.watsonplatform.net/dialog/api/v1/dialogs/{dialog_id}/conversation" 

所有服務的樣本捲髮調用文檔中可供選擇 - https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/dialog/api/v1/