wake-up-neo.net

Verwenden von curl in einem Bash-Skript und Abrufen von curl: (3) Ungültige Zeichen in URL gefunden

Ich habe also ein sehr einfaches Bash-Skript, das für einen Header an einen Auth-Server gelockt wird. Die Header-URL wird in eine Variable geschrieben und dann beim nächsten Curl-Aufruf verwendet. Bei Verwendung des var-Sets beim ersten curl-Aufruf erhalte ich "curl: (3) Illegale Zeichen in URL". Ich kann die var wiederholen und alles sieht gut aus, ich kann sogar die var zurücksetzen (in meinem Beispiel unten) und es funktioniert.

Das Bash-Skript

URL=$(curl -i -X GET -H "X-Auth-User: MyUserna,e" -H "X-Auth-Key: MyAPIKey" "https://urlToAuthServer.tld/auth/v1.0/" | grep "X-Storage-Url:" | awk '{print $2}')

curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt

Beim Ausführen des obigen Beispiels bekomme ich:

curl: (3) Illegal characters found in URL

Die URL var sieht so aus (keine unzulässigen Zeichen)

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

Wenn ich dies im Terminal mache, funktioniert es:

$ URL = $ (curl -i -X ​​GET -H "X-Auth-Benutzer: MyUserna, e -H-X-Auth-Key: MyAPIKey" " https: //urlToAuthServer.tld/auth/v1 .0 / "| grep" X-Storage-Url: "| awk '{print $ 2}')

$ echo $ URL

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

Jetzt kopiere und füge ich den String ein und ordne ihn erneut der URL zu (wieder alle im Terminal):

>$ URL="https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534"
>$ curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt

Es klappt.

Warum bekomme ich im ersten Beispiel den Fehler "curl: (3) Illegal zeichen in URL gefunden"?

Update Ich habe Folgendes ausgeführt: printf %s "$URL" | xxd

Hier ist die Ausgabe (adressiert geändert bis Sie die Idee bekommen)

0000000: 6874 7470 733a 2f2f 6461 6c30 352e 6f62  https://server.ob
0000010: 6a65 6374 7374 6f72 6167 652e 736f 6674  jectstorage.lite
0000020: 6c61 7965 722e 6e65 742f 7631 2f41 5554  sabers.com/v1/AUT
0000030: 485f 6665 3235 3339 3434 2d38 6433 322d  H_aE2563981-7d32-
0000040: 3432 3138 2d61 6566 632d 6665 6638 3465  4201-bdoi-fef94a
0000050: 6166 3331 6232 0d                        ag11c8.
32
gregwinn

Die $ URL enthält am Ende einen \r (CR) (0d). Entferne es mit

URL=${URL%$'\r'}

vor der Verwendung mit curl.

80
choroba

Ich hatte das gleiche Problem, aber es wurde dadurch verursacht, dass ich das Skript über Windows erstellt hatte, was bedeutete, dass das Zeilenende unnötig war.

Eine einfache DOS-Unix-Konvertierung behebte das Problem.

dos2unix <scriptname>
0
ianiver9

Es könnte sich um eine Eingabe am Ende der Datei handeln. Versuchen Sie es zu entfernen oder zu löschen. Beachten Sie, dass das eingegebene Zeichen nicht für die Anzeige geeignet ist.

0
ichak khoury