aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-09-05 16:13:20 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-09-05 16:13:20 +0000
commit18110b519c56a464bca4258332279c580f07a52f (patch)
tree0818c63153e939254958ebeacce23ac713bd9bba /src/main.c
parent4c9768565ec3a9baf26ac8a547bca6e42cc64fa5 (diff)
- Martin Drasar provided the CURLOPT_POSTREDIR patch. It renames
CURLOPT_POST301 (but adds a define for backwards compatibility for you who don't define CURL_NO_OLDIES). This option allows you to now also change the libcurl behavior for a HTTP response 302 after a POST to not use GET in the subsequent request (when CURLOPT_FOLLOWLOCATION is enabled). I edited the patch somewhat before commit. The curl tool got a matching --post302 option. Test case 1076 was added to verify this.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/main.c b/src/main.c
index e9f9d30a2..81f1dfd9c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -557,6 +557,7 @@ struct Configurable {
char *libcurl; /* output libcurl code to this file name */
bool raw;
bool post301;
+ bool post302;
bool nokeepalive; /* for keepalive needs */
long alivetime;
@@ -780,6 +781,7 @@ static void help(void)
" -o/--output <file> Write output to <file> instead of stdout",
" --pass <pass> Pass phrase for the private key (SSL/SSH)",
" --post301 Do not switch to GET after following a 301 redirect (H)",
+ " --post302 Do not switch to GET after following a 302 redirect (H)",
" -#/--progress-bar Display transfer progress as a progress bar",
" -x/--proxy <host[:port]> Use HTTP proxy on given port",
" --proxy-anyauth Pick \"any\" proxy authentication method (H)",
@@ -1669,6 +1671,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
{"$1", "keepalive", FALSE}, /* listed as --no-keepalive in the help */
{"$2", "socks5-hostname", TRUE},
{"$3", "keepalive-time", TRUE},
+ {"$4", "post302", FALSE},
{"0", "http1.0", FALSE},
{"1", "tlsv1", FALSE},
@@ -2177,6 +2180,9 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
if(str2num(&config->alivetime, nextarg))
return PARAM_BAD_NUMERIC;
break;
+ case '4': /* --post302 */
+ config->post302 = toggle;
+ break;
}
break;
case '#': /* --progress-bar */
@@ -2946,19 +2952,19 @@ static const char *unslashquote(const char *line, char *param)
/* default is to output the letter after the backslash */
switch(out = *line) {
case '\0':
- continue; /* this'll break out of the loop */
+ continue; /* this'll break out of the loop */
case 't':
- out='\t';
- break;
+ out='\t';
+ break;
case 'n':
- out='\n';
- break;
+ out='\n';
+ break;
case 'r':
- out='\r';
- break;
+ out='\r';
+ break;
case 'v':
- out='\v';
- break;
+ out='\v';
+ break;
}
*param++=out;
line++;
@@ -4777,12 +4783,15 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
}
/* curl 7.17.1 */
- my_setopt(curl, CURLOPT_POST301, config->post301);
if (!config->nokeepalive) {
my_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockoptcallback);
my_setopt(curl, CURLOPT_SOCKOPTDATA, config);
}
+ /* curl 7.19.1 (the 301 version existed in 7.18.2) */
+ my_setopt(curl, CURLOPT_POSTREDIR, config->post301 |
+ (config->post302 ? CURL_REDIR_POST_302 : FALSE));
+
retry_numretries = config->req_retry;
retrystart = cutil_tvnow();