我正在尝试在Laravel应用程序中使用Tone Analyzer API。无论我尝试什么,我总是得到与max = Math.max(max, array[i]);
min = Math.min(min, array[i]);
相同的响应。我怀疑我的问题是我无法弄清楚如何传递API密钥,但是官方文档对它毫无帮助,因为它仅包含在命令行中使用cURL的说明。我的代码当前看起来是这样的(尽管我尝试了许多其他迭代。如果有人需要我,我也可以发布所有其他失败的尝试):
{"code":401, "error": "Unauthorized"}
我正在运行Laravel 5.8,并使用Ixudra的cURL库。我希望如果答案也使用了该库,但老实说,在这一点上,我随时准备放弃并使用原始PHP,以便对任何答案表示赞赏。
忍者编辑:我知道问题不是我的帐户/ API密钥,因为我试图通过命令行访问API,并且它按预期工作。该问题仅在尝试从Laravel访问时出现。
答案 0 :(得分:7)
IBM Watson Services使用Basic
格式的HTTP标头认证。因此,在终端中使用curl
,您应该以{{1}}的格式传递-u or --user
标志,或者您还可以发送user:password
模式的Authentication Http Header。 / p>
通过调整第二种形式的代码,您可以按照以下步骤进行操作:
Basic user:password
用您的Tone Analyzer API访问令牌替换$response = Curl::to('https://gateway-wdc.watsonplatform.net/tone-analyzer/api/v3/tone?version=2017-09-21&sentences=false')
->withHeader('Content-Type: application/json')
->withHeader('Authorization: Basic apikey:YOUR_TOKEN_HERE')
->withData(array('text' => $text))
->asJson()
->post();
。
https://developer.mozilla.org/docs/Web/HTTP/Authentication https://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.3.0/com.ibm.cics.ts.internet.doc/topics/dfhtl2a.html
希望这会有所帮助!
答案 1 :(得分:3)
这是用于未经授权访问的401状态代码,您需要先登录才能访问API。
我为此检查了文档,这是链接,用于在使用API之前登录到api tone-analyzer#authentication
对于某些服务实例,您可以使用IAM对API进行身份验证。您可以在授权标头或API密钥中传递承载令牌。令牌支持经过身份验证的请求,而无需在每个调用中都嵌入服务凭证。 API密钥使用基本身份验证。