How to encode spaces in curl GET request URL on Linux?

The problem is like this: I would like to send a GET request using curl and the content has spaces, such as

curl "http://example.com/send?msg=hello world"

The space and the “world” will be left away if this command is executed directory on Linux.

How to encode spaces in curl request URL?

You can use the --date-urlencode option of curl:

--data-urlencode <data>

(HTTP) This posts data, similar to the other --data options with
the exception that this performs URL-encoding. (Added in 7.18.0)
To be CGI-compliant, the <data> part should begin with a name 
followed by a separator and a content specification. The <data> 
part can be passed to curl using one of the following syntaxes:

content
This will make curl URL-encode the content and pass that on. 
Just be careful so that the content doesn't contain any = or 
@ symbols, as that will then make the syntax match one of the 
other cases below!

=content
This will make curl URL-encode the content and pass that on. 
The preceding = symbol is not included in the data.

name=content
This will make curl URL-encode the content part and pass that 
on. Note that the name part is expected to be URL-encoded 
already.

@filename
This will make curl load data from the given file (including 
any newlines), URL-encode that data and pass it on in the POST.

name@filename
This will make curl load data from the given file (including any
newlines), URL-encode that data and pass it on in the POST. The 
name part gets an equal sign appended, resulting in 
name=urlencoded-file-content. Note that the name is expected to 
be URL-encoded already.

You command could be:

curl -G "http://example.com/send" --data-urlencode "msg=hello world"

Here, -G is to tell curl that the data are used in an HTTP GET request instead of the POST request that otherwise would be used. The data will be appended to the URL with a ‘?’ separator.

Eric Ma

Eric is a systems guy. Eric is interested in building high-performance and scalable distributed systems and related technologies. The views or opinions expressed here are solely Eric's own and do not necessarily represent those of any third parties.

2 comments:

  1. I do this as well and people told me you can not use -G (get) and I verified it does indeed do a get vs a post.

Leave a Reply

Your email address will not be published. Required fields are marked *