CURLを使用してJSONデータを送信しています。例は次のとおりです。
mycomputer$ curl -H "Content-Type: application/json"
-d "{ "some_string": "Hello mom it's me!" }"
"http://localhost:3001/api_v2/blocks/42af6ab04d9d9635a97f8abec14ed023?api_key=fe5cf0d86af27c086ab5cd4d0eab6641"
値の内容をエスケープする方法はsome_string
?
たとえば、誰かが文字列を入れたい場合、Abe Lincoln's favorite character is the backslash \. He said "I love the \ and single quotes like ''".
カールを使用するときに文字列をどのようにエスケープしますか?
私は次のことを行うべきだと思います。
文字列に
"
エスケープ文字が含まれている場合は、3つのバックスラッシュを使用してください\\\"
。文字列に
'
エスケープ文字が含まれている場合は、エスケープは必要ありません'
。- 文字列に
\
エスケープ文字が含まれている場合は、3つのバックスラッシュを使用してください\\\\
。
忘れてしまった文字はありますか?
答え1
私はあなたの目標が単にシェルから文字列を解析することであると仮定します。その場合は、以下を使用してくださいread
。
例えば
$ IFS='' read -r var
次に、その行を手動で貼り付けます。
複数行の場合は、以下を使用できます。
$ IFS='' read -r -d '' var
もう一度貼り付けますが、今回はCTRL+dで入力を終了します。
または区切り記号を使用してください。
$ IFS='' read -r -d '' var <<'EOF'
{ "some_string": "Hello mom it's me!" }
EOF
どの方法を使用しても、変数を使用して$var
アクセスできます。
$ curl -H "Content-Type: application/json" \
-d "$var" \
"http://localhost:3001/api_v2/blocks/42af6ab04d9d9635a97f8abec14ed023?api_key=fe5cf0d86af27c086ab5cd4d0eab6641"
答え2
方程式からシェルを削除できる場合は、おそらく3つのバックスラッシュは必要ありません。幸いなことに、次のことができます。
curl --config - <<\DATA
url = "http://some.url"
header = "Content-Type: application/json"
data = "{ \"some_string\": "Abe Lincoln's favorite character is the backslash \\. He said \"I love the \\ and single quotes like '.\""
#END
DATA
よりman curl
。違いに注意を払うことをお勧めします。--data-ascii
(それは-d
私のことです)、、、--data-binary
そして--data-urlencoded
。
、およびを使用して取得した--header
さまざまな--data
動作を比較することもできます。--form
(基本的にPOST
若干異なって行われます)、そして--get
前述の特定のデータを?
。
答え3
JSON文書を生成するには、JSON認識ツールを使用することをお勧めします。
使用jq
:
json=$(
jq -n --arg 'Some key "string"' "My cat's useless" '$ARGS.named'
)
使用jo
:
json=$( jo 'Some key "string"'="My cat's useless" )
jo
キー値がで終わる場合は、その値が配列項目であると推定しようとします[]
。
上記のコードの2つのバリエーションでは、変数は次のようになりますjson
。
{
"Some key \"string\"": "My cat's useless"
}
json
その後、呼び出しで変数を使用できますcurl
。
curl -H 'Content-Type: application/json' \
-d "$json" \
'http://localhost:3001/api_v2/some/endpoint'