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
--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"
-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.