Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I have some url which has space in it's query param. I want to use this in curl, e.g.

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"

which gives out

Malformed Request-Line

As per my understanding o/p is due to the space present in query param.

Is there any away to encode the url automatically before providing it to curl command?

share|improve this question

2 Answers 2

curl supports url-encoding internally with --data-urlencode:

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

Trace headers

> GET /data?hello%20world HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*
share|improve this answer
 curl -G "$( echo "$URL" | sed 's/ /%20/' )"

Where $URL is the url you want to do the translations on.

There are also more than one type of translation (encoding) you can have in a URL, so you may want to do:

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

instead.

share|improve this answer
    
Note that echo "$URL" | sed 's/ /%20/' won't do the right thing if there are % characters in the URL. Also, spaces are normally encoded as + (and + as %2b). I recommend the Perl solution, which is reliable. –  Gilles Aug 14 '13 at 22:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.