Если вы хотите, чтобы сервер MySQL решал набор символов, а не PHP как клиент (старое поведение, предпочтительнее, на мой взгляд), попробуйте добавить skip-character-set-client-handshake
к вашему my.cnf
в [mysqld]
и перезапустить mysql
.
Это может вызвать проблемы, если вы используете что-либо, кроме UTF8.
Curl может отправлять двоичные данные из файла, поэтому я использую замену процессов и пользуюсь файловыми дескрипторами всякий раз, когда мне нужно публиковать что-то неприятное с завитом и по-прежнему хочу получить доступ к vars в текущей оболочке. Что-то вроде:
curl "http://localhost:8080" \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
--data @<(cat <<EOF
{
"me": "$USER",
"something": $(date +%s)
}
EOF
)
Это выглядит как --data @/dev/fd/<some number>
, который просто обрабатывается как обычный файл. В любом случае, если вы хотите, чтобы он работал локально, сначала запускайте nc -l 8080
, а в другой оболочке выходите из этой команды. Вы увидите что-то вроде:
POST / HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.43.0
Accept: application/json
Content-Type:application/json
Content-Length: 43
{ "me": "username", "something": 1465057519 }
Как вы можете видеть, вы можете вызывать подсечки и еще что-то вроде эталонных варов в heredoc. Счастливая хакерская надежда это помогает с '"'"'""""'''""''
.
Несколько лет спустя, но это может помочь кому-то, если вы используете замену eval или backtick:
postDataJson="{\"guid\":\"$guid\",\"auth_token\":\"$token\"}"
Использование sed для разделения кавычек с начала и конца ответа
$(curl --silent -H "Content-Type: application/json" https://${target_host}/runs/get-work -d ${postDataJson} | sed -e 's/^"//' -e 's/"$//')
Решение проверено с помощью https://httpbin.org/ и встроенного сценария bash 1. Для переменных без пробелов в нем, т.е. 1
: просто добавьте '
до и после $variable
, когда заменяя нужную строку
for i in {1..3}; do \
curl -X POST -H "Content-Type: application/json" -d \
'{"number":"'$i'"}' "https://httpbin.org/post"; \
done
2. Для ввода с пробелами: переменная Wrap с дополнительным "
, то есть "el a"
:
declare -a arr=("el a" "el b" "el c"); for i in "${arr[@]}"; do \
curl -X POST -H "Content-Type: application/json" -d \
'{"elem":"'"$i"'"}' "https://httpbin.org/post"; \
done
Wow works :)
Вот как мне пришлось использовать его в моем скрипке curl для couchDB. Это очень помогло. Спасибо!
bin/curl -X PUT "db_domain_name_:5984/_config/vhosts/$1.couchdb" -d '"/'"$1"'/"' --user "admin:*****"