How to encode spaces in curl GET request URL on Linux?
Posted on In QAThe 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.
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.
It does not solve the issue when the URL itself contains spaces.