Я попытался сделать слабину с помощью сценария оболочки.Ошибка с JSON и Shell Script
Параметры JSON формируются переменными, что они получают по запросам MySql.
#!/bin/sh
#MySQL RO Access
host='mysqlserver.com'
userdb='slackro'
password='password'
db='db'
#Slack information
hook='https://hook.slack'
user='slackusr'
channel='o_channel'
emoji='slackusr'
#Query
id=`mysql -D $db -u $userdb -p$password -e 'SELECT id FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
tn=`mysql -D $db -u $userdb -p$password -e 'SELECT tn FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
title=`mysql -D $db -u $userdb -p$password -e 'SELECT title FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d' | sed "s/'/ /g" | sed "s/°//g" | sed "s/ /_/g" `
customer=`mysql -D $db -u $userdb -p$password -e 'SELECT customer_id FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
msj=`mysql -D $db -u $userdb -p$password -e 'SELECT a_body FROM article WHERE ticket_id ='$id' ORDER BY id DESC LIMIT 1' -h $host | sed -e '1d'`
url='http://iiabox.infra.ultra.sur.top/otrs/index.pl?Action=AgentTicketZoom;TicketID'$1
#Message
curl -X POST -H 'Content-type: application/json' --data '{"username": "slackusr","icon_emoji": ":slackusr:","attachments": [{"fallback": "New Ticket","pretext": "New ticket from '$customer'","title": "'$title'","title_link": "'$url'","text": "'$msj'","color": "#006495"}]}' $hook
Когда я выполнить этот сценарий, я получить что-то вроде этого
Curl -X POST -H 'Content-Type: приложения/JSON' --data «{ "имя пользователя": "OTRS",» «...»: «slackusr:», «attachments»: [{«fallback»: «New Ticket», «pretext»: «Новый билет с [email protected]», «title»: «Prueba 'Notificación' 6 "," title_link ":" http://site/otrs/index.pl?Action=AgentTicketZoom;TicketID2016110472000067 "," text ":" Cerrado "," color ":" # 006495 "}]} 'https://hooks.slack.com/ curl: (6) Не удалось решить хост: de curl: (6) Не удалось разрешить хост: xn - notificacin-zeb curl: (3) [подстановка] непревзойденная закрывающая фигурная скобка/скобка в колонке 152
Я не понимаю, почему результат переменных $ заголовка показывает, что «Prueba„де Notificación“6"
Если я печатаю $ название переменной с эхом. Я получаю: «Prueba de Notificación 6» без простых кавычек перед первым пространством и после последнего пробела.
Что я могу сделать?
В этом коде есть серьезные ошибки, влияющие на безопасность. Как вы думаете, что произойдет, если кто-то даст номер билета '1 'ИЛИ' 1 '==' 1' или номер билета' '; DROP TABLE билет; --'? –
Что касается безопасного формирования JSON, а не конкатенации строк (что делает вас ответственным за правильное цитирование), используйте инструмент, например 'jq', который понимает синтаксис. –
... и для других ошибок на стороне оболочки, см. Http://shellcheck.net/ –