Ошибки при вызове веб-сервиса с помощью команды 'Curl' от терминала Unix

Если необходимо принять меры против злоумышленного причинения вреда, то MD5 является самым быстрым хешем, который достаточно безопасен (хотя это действительно имеет известные слабые места и таким образом, SHA2 сильно предпочтен). Если Вы просто захотите принять меры против случайного повреждения, то контрольная сумма CRC будет быстрее и достаточно хорошей. Стандарт cksum утилита может использоваться для вычисления этого.

3
27.04.2016, 18:42
2 ответа

Как @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 создайте в функции и просто передайте ее переменные для включения, например.

4
27.01.2020, 21:11
  • 1
    я приношу извинения за последний комментарий. Просто проверенный nswer. Вы были совершенно правы. Я также установил libxml2 утилита для xmllint. Все работает просто отлично теперь. Спасибо за информативный ответ. +1 и принятый. –  The Dark Knight 28.08.2013, 19:25

Я не знаю то, что окружает Вас, используют, но удар, по крайней мере, будет гадить, если Вы будете использовать \\ продолжать строку. Попробовать \ вместо этого.

WRT xml delinting, просто проверьте то, что Вы имеете с блоком проверки допустимости онлайн (например, этот) и используете его.

4
27.01.2020, 21:11
  • 1
    я использую удар и спасибо, я испытаю u r предложения. –  The Dark Knight 17.08.2013, 17:07

Теги

Похожие вопросы