cURL читать внешнюю переменную - PullRequest
0 голосов
/ 26 января 2020

У меня проблемы с вставкой переменной в сценарий bash для запроса cURL
Я генерирую токен API с помощью этой команды и вставляю токен в файл:
curl -k -v - X POST --user admin: pass https://10.10.10.10/api/fmc_platform/v1/auth/generatetoken | & egrep -i '(X-auth | error)' | sed 's / .* X / X /' | grep-токен доступа | awk '{print $ 2}'> token.file

Результат token.file выглядит следующим образом: 237c3364-228a-475f-bf74-3b6822b53a31
Я создал переменную, которая читает токен из токена. file: export tokenkey = $ (cat token.file)

Этот токен будет использован позже для GET / POST / PU SH, но я не могу выложить sh в cURL.
Один из примеров:
curl -k -X GET "https://10.10.10.10/api/fmc_config/v1/domain/xxxx/devices/devicerecords" -H "принять: application / json" -H "X-auth-access-token" $ { tokenkey} ""

Я получаю эту ошибку: {"error": {"category": "FRAMEWORK", "messages": [{"description": "Маркер доступа не найден"}], "серьезность ":" ОШИБКА "}}

Кажется, что она неправильно читает переменную. Я не уверен, как определить переменную в curl для правильного чтения токена.

1 Ответ

0 голосов
/ 26 января 2020

Нет, нет никаких доказательств того, что она неправильно читает переменную. Существует доказательство того, что вы не следуете спецификациям для параметров curl и синтаксиса оболочки.

Во-первых, синтаксис для заголовка HTTP, в основном указанный в curl с использованием -H/--header, требует двоеточия между название и значение заголовка. Вы сделали это правильно для -H "accept: application/json", но не для -H "X-auth-access-token .... По общему признанию, curl может быть более полезным, давая сообщение об ошибке, а не просто игнорируя плохой элемент.

Во-вторых, похоже, что вы пытаетесь включить двойные кавычки в значение заголовка, как требуется для некоторых значений заголовка или частей в HTTP, но используемый вами синтаксис не выполняется sh это.

-H "X-auth-access-token "${tokenkey}""
#                       ^           ^ these marks are NOT part of the data
#  ^--------------------^ instead this part is quoted _to the shell_ 
#                        ^---------^ this is NOT quoted, which for a variable value
#                                    is USUALLY unsafe, but for THIS value works
#                                   ^^ and this is quoted, but empty

Для этого значения (в формате UUID) вам на самом деле не нужно отправлять кавычки в заголовке, но когда они вам нужны или вам нужны, вы должны использовать

-H "X-auth-access-token: \"${tokenkey}\""
# this sends the name WITH the colon, then the value WITH quotemarks around it

FYI Ваш процесс анализа токена по ответу в первой команде может быть намного проще, но вы не спрашивали об этом (или не приводите пример данных, которые понадобятся)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...