Невозможно правильно использовать переменную в команде curl - PullRequest
0 голосов
/ 25 октября 2018

Я использую команду curl, и она использует довольно много переменных.И эти переменные содержат XML.

Мой основной файл XML:

<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor ID="_16x6ttxhv1vzbzoop6nddfaece4r9ota2tem7as" entityID="http://jenkins-0.com:8080/securityRealm/finishLogin" validUntil="2038-10-24T23:16:50.279Z" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"><md:Extensions xmlns:alg="urn:oasis:names:tc:SAML:metadata:algsupport"><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha224"/><alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"/><alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/></md:Extensions><md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol urn:oasis:names:tc:SAML:1.0:protocol urn:oasis:names:tc:SAML:1.1:protocol"><md:Extensions xmlns:init="urn:oasis:names:tc:SAML:profiles:SSO:request-init"><init:RequestInitiator Binding="urn:oasis:names:tc:SAML:profiles:SSO:request-init" Location="http://jenkins-0.com:8080/securityRealm/finishLogin"/></md:Extensions><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIC+TCCAeGgAwIBAgIUARYMLNA/4YtY3NmaNBuptIz+NrkwDQYJKoZIhvcNAQELBQAwFzEVMBMG
A1UEAwwMU0FNTC1qZW5raW5zMB4XDTE4MTAyNDEzMzMxMFoXDTE5MTAyNDEzMzMxMFowFzEVMBMG
A1UEAwwMU0FNTC1qZW5raW5zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjzJjDox7
K5+bosd4aC6Kd5pLtrxTegNR5jGzRXajEMEqpP9ZkwprXXS6o2hcRa6kolPhuB5TxJ2xj+pBmVL+
cji9OW1xeQQWrduNxobLH2eT2FjABrM9kQCVUkf1EMndQRMN0ktScWSG3JGpCWe1Hz7RY3lFjiYy
U8kzTkCi6FRdrFj3gVZx3m82WHWZBku5KVfvl00+sRvjxCWASOiQ5GhJr4o2Q2cGKiESOk9Gs5nT
Po6AdQ5KiXT4Wrk/c4F0+YGIhQjU3ud85yqnBGWePjA5ZRPZ14/cqlB08byfftxvZmdgnfutGYqW
GQrBAx8yMX8wjVh1+ImxQGkd2Tw6swIDAQABoz0wOzAdBgNVHQ4EFgQUrlazwRKNnly9/VqoX6Sr
+jol304wGgYDVR0RBBMwEYIPY249U0FNTC1qZW5raW5zMA0GCSqGSIb3DQEBCwUAA4IBAQAMwzWL
KL4JCquNYXL7njBoiYCUFwytGsItTkqHWClrNMUGFKlyH+Te6srg4uAqSQsPwG9hQ3F/uBCWl1Fm
dTtHxpSTAYfMHceoEOfrRsdF8fazsYqZ1Un6pvxW++BS+Xzb2ljnw1OyeAJv8Bzjz9blaLntPTsX
epR0MGjWqL3YBQbGyyAVQPKGbAtA3iCmTwRrtMjsz2IUgQfWn5VzrowaPrH1G1v+IFUQLllQTDVW
Yaj8JbRrQ+RkgHa8e/6cG5VimTici6kp3/eQDwLPpPzSYwMXadlLZcWOKMEakDxoAw3YO4nb7VZY
P7FJZdF8Ptzb33LcD5iZC9MO3Dd1/DUZ</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:KeyDescriptor use="encryption"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIC+TCCAeGgAwIBAgIUARYMLNA/4YtY3NmaNBuptIz+NrkwDQYJKoZIhvcNAQELBQAwFzEVMBMG
A1UEAwwMU0FNTC1qZW5raW5zMB4XDTE4MTAyNDEzMzMxMFoXDTE5MTAyNDEzMzMxMFowFzEVMBMG
A1UEAwwMU0FNTC1qZW5raW5zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjzJjDox7
K5+bosd4aC6Kd5pLtrxTegNR5jGzRXajEMEqpP9ZkwprXXS6o2hcRa6kolPhuB5TxJ2xj+pBmVL+
cji9OW1xeQQWrduNxobLH2eT2FjABrM9kQxVUkf1EMndQRMN0ktScWSG3JGpCWe1Hz7RY3lFjiYy
U8kzTkCi6FRdrFj3gVZx3m82WHWZBku5KVfvl00+sRvjxCWASOiQ5GhJr4o2Q2cGKiESOk9Gs5nT
Po6AdQ5KiXT4Wrk/c4F0+YGIhQjU3ud85yqnBGWePjA5ZRPZ14/cqlB08byfftxvZmdgnfutGYqW
GQrBAx8yMX7wjVh1+ImxQGkd2Tw6swIDAQABoz0wOzAdBgNVHQ4EFgQUrlazwRKNnly9/VqoX6Sr
+jol304wGgYDVR0RBBMwEYIPY249U0FNTC1qZW5raW5zMA0GCSqGSIb3DQEBCwUAA4IBAQAMwzWL
KL4JCquNYXL7njBoiYCUFwytGsItTlqHWClrNMUGFKlyH+Te6srg4uAqSQsPwG9hQ3F/uBCWl1Fm
dTtgxpSTAYfMHceoEOfrRsdF8fazsYqZ1Un6pvxW++BS+Xzb2ljnw1OyeAJv8Bzjz9blaLntPTsX
epR0MGjWqL3YBQbGyyAVQPKGbAtA3iCmTwRrtMjsz2IUgQfWn5VzrowaPrH1G1v+IFUQLllQTDVW
Yaj8JbRrQ+RkgHa8e/6cG5VimTici6kp3/eQDwLPpPzSYwMXadlLZcWOKMEakDxoAw3YO4nb7VZY
P7FJZdF8Ptzb33LcD5iZC9MO3Dd1/DUZ</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://jenkins-0.com:8080/securityRealm/finishLogin" index="0"/></md:SPSSODescriptor></md:EntityDescriptor>

Я выполняю некоторую постобработку, то есть удаление новых строк и экранирование ".Я сохраняю результат в переменной с именем POST_DATA

POST_DATA=$(cat PRE_DATA.xml | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g' | sed 's/"/\\"/g')

Теперь я хочу отправить этот XML-файл как переменную в поле --data моей команды curl.

curl -X PUT \
  https://my-end-point \
  -H 'Authorization: Basic <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
  "metadata": "$DATA",
  "id": "$SP_ID"
}'

Это явно не сработало, так как я неправильно отправлял переменные.

Я попробовал следующее:

curl -X PUT \
  https://my-end-point \
  -H 'Authorization: Basic <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d "{
  \"metadata\": \"${DATA}\",
  \"id\": \"${SP_ID}\"
}"

Я также попробовал это:

curl -X PUT \
  https://my-end-point \
  -H 'Authorization: Basic <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d "$( printf '{ "metadata": "%s", "id": "%s" }' \
           "${DATA}" "${SP_ID}" )"

Для всех вышеописанных сценариев я получаю:

Invalid JSON provided as input.

Ни одно из этих решений не работает.Однако, когда я использую приложение Почтальон, оно прекрасно работает.В основном я заполняю metadata фактическим значением, и оно работает.Я скопировал команду curl с фактическим значением в поле metadata, и оно работает.Но когда я отправляю это значение в переменную и использую эту переменную, это не работает.Я исчерпал все идеи о том, как сделать эту работу.Есть идеи ?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Простой способ избежать произвольного текста в JSON - использовать jq.Пример сеанса:

$ DATA='<?xml version="1.0" encoding="UTF-8"?>
> <md:EntityDescriptor'
$ SP_ID=1
$ jq --arg metadata "$DATA" --arg id "$SP_ID" '{"metadata": $metadata, "id": $id}' <<< {}
{
  "metadata": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<md:EntityDescriptor",
  "id": "1"
}

Выход jq может затем использоваться в команде curl.

0 голосов
/ 25 октября 2018

Упс, снят.Вы уже попробовали то, что я предложил.Сожалею!(Если кто-то захочет просто удалить мой неправильный ответ здесь, пожалуйста, сделайте это или скажите мне, как).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...