aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Avina <aavina2@gmail.com>2015-04-25 14:49:39 -0400
committerJay Satiro <raysatiro@yahoo.com>2015-04-25 14:51:14 -0400
commit6a7261359b4c7ebddff0c096468047077e7d06ef (patch)
tree47eb925df798f22e2e52b8ca0f79159c035e2505
parentf1e0a0aae714006766b2b1fddbd1f8192dbc933a (diff)
tool: New option --data-raw to HTTP POST data, '@' allowed.
Add new option --data-raw which is almost the same as --data but does not have a special interpretation of the @ character. Prior to this change there was no (easy) way to pass the @ character as the first character in POST data without it being interpreted as a special character. Bug: https://github.com/bagder/curl/issues/198 Reported-by: Jens Rantil
-rw-r--r--docs/curl.116
-rw-r--r--src/tool_getparam.c5
-rw-r--r--src/tool_help.c1
3 files changed, 15 insertions, 7 deletions
diff --git a/docs/curl.1 b/docs/curl.1
index 21d85c931..7b988d043 100644
--- a/docs/curl.1
+++ b/docs/curl.1
@@ -315,9 +315,10 @@ presses the submit button. This will cause curl to pass the data to the server
using the content-type application/x-www-form-urlencoded. Compare to
\fI-F, --form\fP.
-\fI-d, --data\fP is the same as \fI--data-ascii\fP. To post data purely binary,
-you should instead use the \fI--data-binary\fP option. To URL-encode the value
-of a form field you may use \fI--data-urlencode\fP.
+\fI-d, --data\fP is the same as \fI--data-ascii\fP. \fI--data-raw\fP is almost
+the same but does not have a special interpretation of the @ character. To
+post data purely binary, you should instead use the\fI--data-binary\fP option.
+To URL-encode the value of a form field you may use \fI--data-urlencode\fP.
If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating
@@ -329,7 +330,8 @@ read the data from, or - if you want curl to read the data from
stdin. Multiple files can also be specified. Posting data from a file
named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is
told to read from a file like that, carriage returns and newlines will be
-stripped out.
+stripped out. If you don't want the @ character to have a special
+interpretation use \fI--data-raw\fP instead.
.IP "-D, --dump-header <file>"
Write the protocol headers to the specified file.
@@ -354,6 +356,10 @@ and carriage returns are preserved and conversions are never done.
If this option is used several times, the ones following the first will append
data as described in \fI-d, --data\fP.
+.IP "--data-raw <data>"
+(HTTP) This posts data similarly to \fI--data\fP but without the special
+interpretation of the @ character. See \fI-d, --data\fP.
+(Added in 7.43.0)
.IP "--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)
@@ -560,7 +566,7 @@ If this option is enabled and the server sends an invalid (e.g. expired)
response, if the response suggests that the server certificate has been revoked,
or no response at all is received, the verification fails.
-This is currently only implemented in the OpenSSL, GnuTLS and NSS backends.
+This is currently only implemented in the OpenSSL, GnuTLS and NSS backends.
(Added in 7.41.0)
.IP "--false-start"
diff --git a/src/tool_getparam.c b/src/tool_getparam.c
index 121afc44d..1b5d6d2b0 100644
--- a/src/tool_getparam.c
+++ b/src/tool_getparam.c
@@ -196,6 +196,7 @@ static const struct LongShort aliases[]= {
{"c", "cookie-jar", TRUE},
{"C", "continue-at", TRUE},
{"d", "data", TRUE},
+ {"dr", "data-raw", TRUE},
{"da", "data-ascii", TRUE},
{"db", "data-binary", TRUE},
{"de", "data-urlencode", TRUE},
@@ -1099,6 +1100,7 @@ ParameterError getparameter(char *flag, /* f or -long-flag */
char *postdata = NULL;
FILE *file;
size_t size = 0;
+ bool raw_mode = (subletter == 'r');
if(subletter == 'e') { /* --data-urlencode*/
/* [name]=[content], we encode the content part only
@@ -1124,7 +1126,6 @@ ParameterError getparameter(char *flag, /* f or -long-flag */
}
if('@' == is_file) {
/* a '@' letter, it means that a file name or - (stdin) follows */
-
if(curlx_strequal("-", p)) {
file = stdin;
set_binmode(stdin);
@@ -1185,7 +1186,7 @@ ParameterError getparameter(char *flag, /* f or -long-flag */
return PARAM_NO_MEM;
}
}
- else if('@' == *nextarg) {
+ else if('@' == *nextarg && !raw_mode) {
/* the data begins with a '@' letter, it means that a file name
or - (stdin) follows */
nextarg++; /* pass the @ */
diff --git a/src/tool_help.c b/src/tool_help.c
index 2f7fefd97..ef26ded0a 100644
--- a/src/tool_help.c
+++ b/src/tool_help.c
@@ -65,6 +65,7 @@ static const char *const helptext[] = {
" --crlf Convert LF to CRLF in upload",
" --crlfile FILE Get a CRL list in PEM format from the given file",
" -d, --data DATA HTTP POST data (H)",
+ " --data-raw DATA HTTP POST data, '@' allowed (H)",
" --data-ascii DATA HTTP POST ASCII data (H)",
" --data-binary DATA HTTP POST binary data (H)",
" --data-urlencode DATA HTTP POST data url encoded (H)",