单击按钮时收到此错误响应:
" 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客户端或来自curl等应用程序的swagger API,而不是来自您自己的Web应用程序的基于浏览器的客户端。实际上,这就是swagger应用程序的工作方式,应用程序位于https://watson-api-explorer.mybluemix.net,并且它在https://watson-api-explorer.mybluemix.net上有代理端点
您将需要自己的应用程序入口点作为Dialog服务API的真实URL的代理,其入口点为https://gateway.watsonplatform.net/dialog/api
您正在将对话框ID传递到代理中,因此您必须以某种方式获取它。有两种方法可以做到这一点。通过创建它ala -
curl -u "{username}":"{password}" -X POST \
--form file=@template.xml \
--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/