내 스크립트에서 웹 서비스를 호출하는 명령을 사용하려고 했습니다 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
답변2
어떤 쉘을 사용하고 있는지 모르겠지만 bash를 사용하여 \\
줄을 계속하면 적어도 충돌이 발생합니다. 시도 \
해봐.
WRT XML 삭제, 온라인 유효성 검사기를 사용하여 가지고 있는 내용을 확인하세요(예를 들어 이) 그것을 사용하십시오.