私のスクリプトでWebサービスを呼び出すコマンドを使用しようとしましたCurl
。そこから台本を受けました。ここで。
私のスクリプト:
#! /bin/sh
ENDPOINT="http://mathertel.de/AJAXEngine/S01_AsyncSamples/CalcService.asmx"
VALUE=1234567890
if [ -n "${1}" ]; then
VALUE=${1}
fi
curl --silent \\
--data \\
@- \\
--header 'Content-Type: application/soap+xml; charset=utf-8' \\
--user-agent "" \\
${ENDPOINT} <<EOF | xmllint --format -
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CalcPrimeFactors xmlns="http://www.mathertel.de/S01_AsyncSamples/">
<inputText>${VALUE}</inputText>
</CalcPrimeFactors>
</soap12:Body>
</soap12:Envelope>
EOF
次のエラーが発生します。
./CalcService.sh: 10: ./CalcService.sh: --data: not found
./CalcService.sh: 11: ./CalcService.sh: @-: not found
./CalcService.sh: 12: ./CalcService.sh: --header: not found
./CalcService.sh: 13: ./CalcService.sh: --user-agent: not found
./CalcService.sh: 14: ./CalcService.sh: ./CalcService.sh: 14: ./CalcService.sh: http://mathertel.de/AJAXEngine/S01_AsyncSamples/CalcService.asmx: not found
xmllint: not found
カールをインストールしてインストールしようとしましたが、xmllint
破損したパッケージと呼ばれながらインストールされませんでした。
ここで何が起こっているのか、そしてそれを軽減するために何ができるのかという提案がある人はいますか?これは私を狂わせています...
ベストアンサー1
@goldilocksが提案したように、二重バックスラッシュ()を削除し\\
て単一のバックスラッシュ()に置き換えることで\
問題が解決するようです。以下は修正されたサンプル出力です。
$ ./curl.bash
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CalcPrimeFactorsResponse xmlns="http://www.mathertel.de/S01_AsyncSamples/">
<CalcPrimeFactorsResult>2 3 3 5 3607 3803</CalcPrimeFactorsResult>
</CalcPrimeFactorsResponse>
</soap:Body>
</soap:Envelope>
もっと良い方法がありますか?
curl
オプションを渡すために使用できる次の構成が提供されます。
#!/bin/bash
{ echo '--opt1'
echo '--opt2'
...
} | curl --config -
したがって、上記の内容を次のように調整できます。
#!/bin/bash
ENDPOINT="http://mathertel.de/AJAXEngine/S01_AsyncSamples/CalcService.asmx"
VALUE=1234567890
if [ -n "${1}" ]; then
VALUE=${1}
fi
read -r -d '' DATA <<EOF
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CalcPrimeFactors xmlns="http://www.mathertel.de/S01_AsyncSamples/">
<inputText>${VALUE}</inputText>
</CalcPrimeFactors>
</soap12:Body>
</soap12:Envelope>
EOF
{
echo '--silent'
echo '--header "Content-Type: application/soap+xml; charset=utf-8"'
echo '--user-agent ""'
echo "--url ${ENDPOINT}"
echo '--data-binary @-'
echo "$DATA"
} | curl --config - | xmllint --format -
この設定を使用すると、ペイロードをパラメータ化するのが簡単になり、構成全体を関数にラップしてから含める変数を渡す$DATA
ことができます。curl