web-dev-qa-db-fra.com

Est-il possible de coder l'url dans la commande curl?

J'ai une URL qui a de l'espace dans son paramètre de requête. Je veux l'utiliser en boucle, par exemple.

curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"

qui donne

Malformed Request-Line

Selon ma compréhension, o/p est dû à l'espace présent dans le paramètre de requête.

Existe-t-il un espace pour encoder automatiquement l'URL avant de la fournir à curl?

114
Aashish P.

curl prend en charge le codage d'URL en interne avec --data-urlencode:

$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"

-G est également nécessaire pour ajouter les données à l'URL.

En-têtes de trace

> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*
182
damphat
 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"

$URL est l'URL sur laquelle vous souhaitez effectuer les traductions.

Il existe également plusieurs types de traduction (encodage) que vous pouvez avoir dans une URL, vous pouvez donc faire:

curl -G "$(Perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"

au lieu.

6
Drav Sloan