我正在尝试在Laravel应用程序中使用Tone Analyzer API。无论我尝试什么,我总是得到相同的{"code":401, "error": "Unauthorized"}
响应。我怀疑我的问题是我不知道如何传递API键,但官方文档没有任何帮助,因为它只包含在命令行中使用cURL的说明。我的代码目前看起来是这样的(尽管我已经尝试了许多其他迭代。如果任何人需要我,我也可以发布所有其他不成功的尝试):
$response = Curl::to('https://gateway-wdc.watsonplatform.net/tone-analyzer/api/v3/tone?version=2017-09-21&sentences=false')
->withOption('HTTPHEADER', array(
'Content-Type: application/json',
'apikey: REDACTED'))
->withData(array('text' => $text))
->asJson()
->post();
我运行的是Laravel5.8,使用的是Ixudra的cURL库。我更希望answers也使用这个库,但老实说,在这一点上,我已经准备好放弃,无论如何都要使用普通的PHP,所以任何答案都会受到感谢。
忍者编辑:我知道问题不在于我的账号/ API密钥,因为我已经尝试过通过命令行访问API,但它的工作方式与预期的一样。这个问题只有在尝试从Laravel访问它时才会出现。
发布于 2019-05-02 14:21:17
IBM Watson Services使用Basic
格式的HTTP Header身份验证。因此,在终端中使用curl
时,您应该以user:password
格式传递-u or --user
标志,或者也可以以模式:Basic user:password
发送Authentication Http头部。
通过调整第二个表单的代码,您可以执行以下操作:
$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();
将YOUR_TOKEN_HERE
替换为您的音调分析器API访问令牌。
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
希望这能有所帮助!
发布于 2019-05-02 13:59:44
401状态码,用于未经授权的访问,访问API前需要先登录。
我查看了文档,这里有一个链接,用于在使用tone-analyzer#authentication之前登录到该应用程序接口
对于某些服务实例,您使用IAM向API进行身份验证。您可以在Authorization头部或API密钥中传递不记名令牌。令牌支持经过身份验证的请求,而无需在每个调用中嵌入服务凭据。API密钥使用基本身份验证。
https://stackoverflow.com/questions/55912989
复制