web-dev-qa-db-fra.com

curl avec des variables sur le script bash

Lorsque j'utilise des valeurs réelles sur la commande curl dans le script suivant, cela fonctionne et me donne un résultat, mais lorsque j'utilise des variables, cela ne fonctionne pas correctement

Je pense que c'est un problème avec la façon dont je les définis sur la commande

amz_t=$(cat Amazon-token.txt )
flx_id=$(cat flex-id.txt )
ses_t=$(cat session-token.txt )

curl -s -H 'Host: flex-capacity-na.Amazon.com' \
  -H 'Cookie: session-token='$ses_t'' \
  -H 'x-amz-access-token: '$amz_t'' \
  -H 'x-flex-instance-id: '$flx_id'' \
  -H 'Accept: */*' \
  -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' \
  -H 'Accept-Language: en-us' \
  --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

Il s'agit de la commande que j'essaie d'exécuter dans le script ci-dessus mentionne que les fichiers txt contiennent uniquement certaines valeurs sans valeurs parasites.

6
Dan Rox

Essayez quelque chose comme ceci:

amz_t=$(cat Amazon-token.txt)
flx_id=$(cat flex-id.txt)
ses_t=$(cat session-token.txt)

UA='iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141'

URL='https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122'

curl -s -H 'Host: flex-capacity-na.Amazon.com' \
  -H "Cookie: session-token=$ses_t" \
  -H "x-amz-access-token: $amz_t" \
  -H "x-flex-instance-id: $flx_id" \
  -H 'Accept: */*' \
  -H "User-Agent: $UA" \
  -H 'Accept-Language: en-us' \
  --compressed "$URL" >> output.txt

Utilisez des guillemets simples pour les chaînes fixes (c'est-à-dire sans aucune variable) et des guillemets doubles pour les chaînes qui nécessitent une interpolation variable.

9
cas

Vous ne pouvez pas utiliser de guillemets simples sur vos variables. Cela empêchera bash d'interpréter le $ Caractère spécial. Vous pouvez utiliser des guillemets doubles à la place. http://tldp.org/LDP/abs/html/quoting.html

[~ # ~] modifier [~ # ~]

Je me rends compte maintenant que vous fermez tous vos guillemets simples avant et que vous les rouvrez après vos variables, mais les variables sont probablement encore lues incorrectement car elles ne sont pas citées. Je ne suis pas sûr que vous ayez même besoin de tout mettre entre guillemets dans cette commande, mais si vous le faites, vous pouvez toujours mettre vos guillemets comme ci-dessous:

Changez de ligne:

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H 'Cookie: session-token='$ses_t'' -H 'x-amz-access-token: '$amz_t'' -H 'x-flex-instance-id: '$flx_id'' -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

À:

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H 'Cookie: session-token='"$ses_t" -H 'x-amz-access-token: '"$amz_t" -H 'x-flex-instance-id: '"$flx_id" -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

Mais je pense que cela fonctionnerait aussi:

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H "Cookie: session-token=$ses_t" -H "x-amz-access-token: $amz_t" -H "x-flex-instance-id: $flx_id" -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt
2
jesse_b