Не можете получить доступ к API IBM Tone Analyzer? - PullRequest
7 голосов
/ 30 апреля 2019

Я пытаюсь использовать API Tone Analyzer в приложении Laravel. Независимо от того, что я пытаюсь, я всегда получаю один и тот же ответ {"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, поэтому любые ответы приветствуются.

Редактирование ниндзя: я знаю, что проблема не в моей учетной записи / ключе API, потому что я пытался получить доступ к API через командную строку, и он работал так, как ожидалось. Эта проблема возникает только при попытке доступа к нему из Laravel.

Ответы [ 2 ]

7 голосов
/ 02 мая 2019

IBM Watson Services использует аутентификацию заголовка HTTP в формате Basic.Поэтому, используя curl в терминале, вы должны передать флаг -u or --user в формате user:password, или вы также можете отправить заголовок http аутентификации в виде: Basic user:password.

.код для этой второй формы, вы можете сделать это следующим образом:

$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 на свой токен доступа Tone Analyzer 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

Надеюсь, это поможет!

3 голосов
/ 02 мая 2019

Это код состояния 401, который используется для несанкционированного доступа, вам необходимо войти в систему, прежде чем получить доступ к API.

Я проверяю документы для этого и вот ссылка для входа в API перед использованием тон-анализатор # аутентификации

В некоторых экземплярах службы вы проходите аутентификацию в API с помощью IAM. Вы можете передать токен на предъявителя в заголовке авторизации или в ключе API. Токены поддерживают аутентифицированные запросы без встраивания учетных данных службы в каждый вызов. Ключи API используют базовую аутентификацию.

...