在curl命令中无法正确使用变量

时间:2018-10-24 23:44:43

标签: xml bash curl

我正在使用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.

这些解决方案均无效。但是,当我使用Postman应用程序时,它工作得很好。基本上,我用实际值填充metadata,它可以正常工作。我使用curl字段中的实际值复制了metadata命令,它可以正常工作。但是,当我将该值发送到变量并使用该变量时,它不起作用。我已经用尽了所有关于如何使这项工作的想法。有任何想法吗 ?

2 个答案:

答案 0 :(得分:0)

箍,撤回。您已经尝试过我的建议。抱歉! (如果有人愿意在这里删除我不正确的答案,请这样做,或者告诉我如何做。)

答案 1 :(得分:0)

在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输出。