2017-10-13 4 views
0

J'ai l'URL dans une variable, qui est lu à partir d'un autre endroit. Cette variable a les caractères ? et &. Si je saisis l'URL complète entre guillemets simples ou doubles, cela fonctionne très bien. Mais si j'entre la variable, curl se plaint que l'URL a des caractères illégaux. Comment est-ce que je contourne ceci? PS: J'ai également essayé de remplacer ? et & avec %3F et %26 mais cela n'a pas fonctionné.cURL: comment entrer une URL à partir d'une variable avec des caractères spéciaux

Exemple:

$ echo "$location" 
https://example.com/dothis?param1=something&param2=somethingelse 
$ curl "$location" -o /dev/null > /dev/null 
curl: (3) Illegal characters found in URL 
$ curl "https://example.com/dothis?param1=something&param2=somethingelse" -o /dev/null > /dev/null 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 126k 0 126k 0  0 13974  0 --:--:-- 0:00:09 --:--:-- 32272 
+0

Impossible de reproduire ceci ici. Peut-être qu'il y a des caractères invisibles dans votre URL. Réessayez, peut-être, après avoir redéfini votre variable 'location'. –

+0

Essayez 'echo" $ location "| LC_ALL = C cat -vet' pour voir s'il y a des caractères invisibles dans la variable. Notez que le '-e' le fera ajouter un" $ "à la fin de la ligne; rien d'autre que cela est un problème potentiel. –

+0

C'est vrai @GordonDavisson. 'cat -A' a montré un'^M' avant '$'. Merci beaucoup. –

Répondre

1

Il peut y avoir des caractères invisibles. Donc, essayez

printf '%s' "$location" | hexdump -C 
+0

vous aviez tellement raison. Il y avait un caractère final représenté par un point dans hexdump, faisant cela pour comparer travaillé. Merci, curl $ {location :: $ {# location} -1} "-o/dev/null' –