2016-01-11 74 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/