Не удается получить доступ к IBM Tone Analyzer API?

Я пытаюсь использовать 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 и библиотеку cURL от Ixudra. Я бы предпочел, чтобы в ответах использовалась и эта библиотека, но, честно говоря, на данный момент я готов отказаться и использовать ванильный PHP в любом случае, поэтому любые ответы приветствуются.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
7
0
379
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Спасибо за ответ, но это документация по использованию cURL в командной строке. В вопросе я указал, что мне конкретно нужна помощь с доступом к нему с PHP. Я могу получить доступ к API из командной строки, поэтому я знаю, что проблема не в том, что я не авторизован; Я просто не могу понять, как построить вызов PHP.

Jess 03.05.2019 14:16

Джесс STJ, я думаю, вы не получили мой ответ. Вы можете сделать это с помощью вашего класса curl или с помощью чистого php curl, если вы знаете о curl или можете использовать красивую библиотеку docs.guzzlephp.org/en/стабильный , это просто http-запрос, сначала вам нужно войти через http-запрос, как сказано в этой документации. взамен вы получите токен. и тогда каждый ваш запрос должен иметь этот токен.

Karan Sadana 04.05.2019 07:23

Извините, но я до сих пор не понимаю, что вы имеете в виду. Я не могу войти, потому что у меня нет имени пользователя и пароля, все, что у меня есть, это ключ API. IBM даже заявляет, что использование имени пользователя и пароля теперь не рекомендуется в пользу использования этого ключа.

Jess 07.05.2019 01:36
Ответ принят как подходящий

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/Аутентификацияhttps://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.3.0/com.ibm.cics.ts.internet.doc/topics/dfhtl2a.html

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

Спасибо за ответ, но он все еще не работает :( он все еще возвращает то же самое сообщение «401 Unauthorized».

Jess 03.05.2019 14:11

Хорошо, подождите, я думаю, у меня это действительно работает. Мне пришлось заменить второй оператор withHeader() на ->withOption('USERPWD', 'apikey:[УДАЛЕНО]). Все еще отмечаю этот как лучший, потому что вы действительно помогли мне в этом.

Jess 07.05.2019 01:46

Спасибо! Желаю успеха в вашем проекте!

Rafael Laurindo 08.05.2019 14:11

Другие вопросы по теме