web-dev-qa-db-fra.com

Utiliser curl dans un script bash et obtenir curl: (3) Caractères illégaux trouvés dans l'URL

J'ai donc un script bash très simple qui se curie sur un serveur d'authentification pour un en-tête. L'URL de l'en-tête est écrit dans une variable, puis utilisé dans le prochain appel curl. Lors de l'utilisation de la var définie dans le premier appel curl, le message "curl: (3) caractères illégaux trouvés dans l'URL" s'affiche. Je suis capable de faire écho le var et tout semble bon, je suis même capable de réinitialiser le var (dans mon exemple ci-dessous) et cela fonctionne.

Le script Bash

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

Lorsque j'exécute l'exemple ci-dessus, je reçois:

curl: (3) Illegal characters found in URL

L'URL var ressemble à ceci (pas de caractères illégaux)

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

Quand je fais ça dans un terminal ça marche:

$ URL = $ (curl -i -X ​​GET -H "X-Auth-User: MonUserna, 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

Maintenant, je copie et colle la chaîne et la redéfinit en URL de la manière suivante (toujours dans le 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

Ça marche.

Alors, pourquoi l’erreur "curl: (3) Caractères illégaux trouvés dans l’URL" apparaît-elle dans le premier exemple?

Mise à jour J'ai lancé ceci: printf %s "$URL" | xxd

Voici le résultat (l'adresse a changé, vous voyez l'idée)

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

L'URL $ contient un \r (CR) à la fin (0d). Retirez-le avec

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

avant de l'utiliser avec curl.

80
choroba

J'ai eu le même problème, mais c'est parce que j'avais créé le script sous Windows, ce qui signifiait que la fin de ligne avait un caractère inutile.

Une simple conversion vers unix l'a corrigé.

dos2unix <scriptname>
0
ianiver9

Il pourrait s'agir d'une entrée à la fin du fichier. Essayez de l'enlever ou de le supprimer, notez que le caractère saisi n'est pas quelque chose de visible ....

0
ichak khoury