【问题标题】:Can't access IBM Tone Analyzer API?无法访问 IBM Tone Analyzer API?
【发布时间】:2019-09-18 15:30:52
【问题描述】:

我正在尝试在 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();

我正在运行 Laravel 5.8 并使用 Ixudra 的 cURL 库。如果答案也使用这个库,我更愿意,但老实说,在这一点上,我已经准备好放弃并使用 vanilla PHP,所以任何答案都会受到赞赏。

Ninja 编辑:我知道问题不在于我的帐户/API 密钥,因为我尝试通过命令行访问 API 并且它按预期工作。仅当尝试从 Laravel 访问它时才会出现此问题。

【问题讨论】:

    标签: laravel php-curl tone-analyzer


    【解决方案1】:

    IBM Watson Services 使用 Basic 格式的 HTTP 标头认证。因此,在终端中使用curl,你应该以user:password的格式传递-u or --user标志,或者你也可以使用Basic user:password的模式发送Authentication Http Header。

    通过为第二种形式调整你的代码,你可以这样做:

    $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();
    

    用您的 Tone Analyzer API 访问令牌替换 YOUR_TOKEN_HERE

    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

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答,但它仍然不起作用:(它仍然返回相同的“401 Unauthorized”消息。
    • 好的等等,我想我已经让它真正工作了。我不得不用 ->withOption('USERPWD', 'apikey:[REDACTED]) 替换第二个 withHeader() 语句。仍然将这个标记为最好的,因为你确实让我走了大部分路。
    • 谢谢!我希望你的项目成功!
    【解决方案2】:

    401状态码,用于未经授权的访问,需要先登录才能访问API。

    我检查了这个文档,这里是链接,用于在使用它之前登录到 api tone-analyzer#authentication

    对于某些服务实例,您可以使用 IAM 对 API 进行身份验证。您可以在授权标头中传递不记名令牌或 API 密钥。令牌支持经过身份验证的请求,而无需在每次调用中嵌入服务凭证。 API 密钥使用基本身份验证。

    【讨论】:

    • 感谢您的回答,但这是在命令行中使用 cURL 的文档。我在问题中说,我特别需要从 PHP 访问它的帮助。我可以从命令行很好地访问 API,所以我知道问题不在于我没有被授权;我只是不知道如何构造 PHP 调用。
    • Jess STJ,我觉得你没有得到我的回答。如果你知道 curl 或者你可以使用漂亮的库 docs.guzzlephp.org/en/stable ,你可以使用你的 curl 类或一些纯 php curl 来做到这一点,它只是一个 http 请求,首先你需要通过 http 请求登录,如该文档所述。作为回报,您将获得令牌。然后你的每个请求都应该有这个令牌。
    • 对不起,我还是不明白你的意思。我无法登录,因为我没有用户名和密码,我只有一个 API 密钥。 IBM 甚至声明,现在不推荐使用用户名和密码,而支持使用此密钥。
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多