Итак, чтобы отправить POST-запрос гистам (github), вы можете сделать что-то вроде этого, как показано на https://gist.github.com/caspyi ...

curl --user "user" -X POST --data '{"description":"Created via API","public":"true","files":{"file1.txt":{"content":"Demo"}}' https://api.github.com/gists

Но в приведенном выше примере имя файла и его содержимое жестко запрограммированы, что является частью .. file1.txt":{"content":"Demo"} ..

Я заменяю вышеуказанную часть моей переменной $file":{"content":"$content"} но инициализирую переменную, запрос json должен быть заключен в двойные кавычки, что я и сделал как

curl --user "user" -X POST --data "{\"description\":\"Created via API\",\"public\":\"true\",\"files\":{\"$file\":{\"content\":\"$content\"}}' https://api.github.com/gists

Но это не работает, я получаю ошибку JSON.

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://developer.github.com/v3/gists/#create-a-gist"
}

Даже если я заменил все экранированные двойные кавычки на \' одинарные кавычки.

Кто-нибудь знает, как включить переменную в этот запрос json? кстати: я использовал все заголовки, такие как

 -H "Content-Type: application/json; charset=UTF-8" 

и много комбинаций для подтверждения запроса, но безрезультатно

ОБНОВИТЬ.

Вот как выглядит весь контент.

function gist_controller(){
    content=$(cat $1)
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    read -p "enter your password - " pass 
    public="false"
    gist_content=$(cat $1)
    curl --user "samserayo"  -H "Content-Type: application/json; charset=UTF-8" -X POST -d  "{ 'description': 'Created via API', 'public': 'true', 'files':{ ' '$1 ':{ 'content': '$gist_content'}}" https://api.github.com/gists
}

3 ответа3

0

Вы не показываете, какое значение вы установили для $ file или $ content. На что распространяются оба? Скорее всего, один или другой, или оба, содержат символы, которые синтаксический анализатор JSON не любит. Скорее всего, что-то внутри значения раскрытия переменной необходимо дополнительно экранировать или кодировать перед отправкой в анализатор JSON через curl.

Экспортировали ли вы переменные среды?

Пытаться:

echo "$ file $ content";

чтобы убедиться, что они установлены так, как вы ожидаете.

0

Вы не указали, какую оболочку вы используете, но все, что находится в двойных кавычках, зависит от расширения имени файла оболочки. В частности, {} имеет значение для большинства оболочек. Вот почему приведенный вами пример использовал одинарные кавычки, чтобы обернуть все это.

Экранирование оболочки сложно, и иногда кажется невозможным получить то, что вы хотите. Честно говоря, в таких случаях я написал бы скрипт на Python для вызова curl, где я знаю, что оболочка не "помогает" мне.

-1

Вы должны поместить всю строку в двойные кавычки " . И вам нужно экранировать кавычки внутри строки (не конвертировать их в другие типы кавычек!).

Так что вместо:

"{'description': 'Создано через API', 'public': 'true', 'files': {'' $ 1 ': {' content ':' $ gist_content '}}"

Ты хочешь:

"{\" description\": \" Создано с помощью API \", \" public \": \" true \", \" files \": {\" $ 1 \": {\" content \": \" $ gist_content \"}}}"

Вам, вероятно, следует проверить с помощью echo и убедиться, что строка точно верна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .