it-swarm.com.de

Curl mit Variablen auf Bash-Skript

Wenn ich im nächsten Skript tatsächliche Werte für den Befehl curl verwende, funktioniert dies und gibt mir ein Ergebnis zurück, aber wenn ich Variablen verwende, funktioniert es nicht richtig

Ich denke, das ist ein Problem damit, wie ich sie im Befehl definiere

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

Dies ist der Befehl, den ich versuche, im oben genannten Skript auszuführen. TXT-Dateien enthalten nur bestimmte Werte, keine Garbage-Werte.

6
Dan Rox

Versuchen Sie so etwas:

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

Verwenden Sie einfache Anführungszeichen für feste Zeichenfolgen (d. H. Ohne Variablen) und doppelte Anführungszeichen für Zeichenfolgen, für die eine Variableninterpolation erforderlich ist.

9
cas

Sie können keine einfachen Anführungszeichen für Ihre Variablen verwenden. Dies führt dazu, dass bash das Sonderzeichen $ Nicht interpretiert. Sie können stattdessen doppelte Anführungszeichen verwenden. http://tldp.org/LDP/abs/html/quoting.html

[~ # ~] edit [~ # ~]

Mir ist jetzt klar, dass Sie alle Ihre einfachen Anführungszeichen vor und nach Ihren Variablen wieder öffnen, aber die Variablen werden wahrscheinlich immer noch falsch gelesen, weil sie nicht in Anführungszeichen gesetzt sind. Ich bin mir nicht sicher, ob Sie in diesem Befehl überhaupt alles in einfache Anführungszeichen setzen müssen, aber wenn Sie dies tun, können Sie Ihre doppelten Anführungszeichen wie folgt eingeben:

Ändern Sie Ihre Linie:

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

Zu:

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

Aber ich denke, das würde auch funktionieren:

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