mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
--request-target: instead of --strip-path-slash
... and CURLOPT_REQUEST_TARGET instead of CURLOPT_STRIP_PATH_SLASH. This option instead provides the full "alternative" target to use in the request, instead of extracting the path from the URL. Test 1298 and 1299 updated accordingly. Idea-by: Evert Pot Suggestion: https://daniel.haxx.se/blog/2017/06/19/options-with-curl/comment-page-1/#comment-18373 Closes #1593
This commit is contained in:
parent
8de8f4eb7e
commit
9b167fd090
@ -42,6 +42,6 @@ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cer
|
||||
tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \
|
||||
tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \
|
||||
unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \
|
||||
verbose.d version.d write-out.d xattr.d strip-path-slash.d
|
||||
verbose.d version.d write-out.d xattr.d request-target.d
|
||||
|
||||
OTHERPAGES = page-footer page-header
|
||||
|
8
docs/cmdline-opts/request-target.d
Normal file
8
docs/cmdline-opts/request-target.d
Normal file
@ -0,0 +1,8 @@
|
||||
Long: request-target
|
||||
Help: Specify the target for this request
|
||||
Protocols: HTTP
|
||||
---
|
||||
Tells curl to use an alternative "target" (path) instead of using the path as
|
||||
provided in the URL. Particularly useful when wanting to issue HTTP requests
|
||||
without leading slash or other data that doesn't follow the regular URL
|
||||
pattern, like "OPTIONS *".
|
@ -1,7 +0,0 @@
|
||||
Long: strip-path-slash
|
||||
Help: Strip off the first slash of the path
|
||||
Protocols: HTTP
|
||||
---
|
||||
Tells curl to strip the leading slash from the path when it sends the path to
|
||||
the server. Useful when wanting to issue HTTP requests without leading slash,
|
||||
like "OPTIONS *".
|
@ -303,8 +303,8 @@ Start a new cookie session. See \fICURLOPT_COOKIESESSION(3)\fP
|
||||
Add or control cookies. See \fICURLOPT_COOKIELIST(3)\fP
|
||||
.IP CURLOPT_HTTPGET
|
||||
Do a HTTP GET request. See \fICURLOPT_HTTPGET(3)\fP
|
||||
.IP CURLOPT_STRIP_PATH_SLASH
|
||||
Cut off the leading slash from the path. \fICURLOPT_STRIP_PATH_SLASH(3)\fP
|
||||
.IP CURLOPT_REQUEST_TARGET
|
||||
Set the request target. \fICURLOPT_REQUEST_TARGET(3)\fP
|
||||
.IP CURLOPT_HTTP_VERSION
|
||||
HTTP version to use. \fICURLOPT_HTTP_VERSION(3)\fP
|
||||
.IP CURLOPT_IGNORE_CONTENT_LENGTH
|
||||
|
@ -108,4 +108,4 @@ Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
|
||||
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
|
||||
.SH "SEE ALSO"
|
||||
.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_NOBODY "(3), "
|
||||
.BR CURLOPT_STRIP_PATH_SLASH "(3), "
|
||||
.BR CURLOPT_REQUEST_TARGET "(3), "
|
||||
|
@ -57,4 +57,4 @@ Always
|
||||
Returns CURLE_OK
|
||||
.SH "SEE ALSO"
|
||||
.BR CURLOPT_HTTPGET "(3), " CURLOPT_POST "(3), "
|
||||
.BR CURLOPT_STRIP_PATH_SLASH "(3), "
|
||||
.BR CURLOPT_REQUEST_TARGET "(3), "
|
||||
|
@ -20,18 +20,18 @@
|
||||
.\" *
|
||||
.\" **************************************************************************
|
||||
.\"
|
||||
.TH CURLOPT_STRIP_PATH_SLASH 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
|
||||
.TH CURLOPT_REQUEST_TARGET 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
|
||||
.SH NAME
|
||||
CURLOPT_STRIP_PATH_SLASH \- strip the leading slash from the path
|
||||
CURLOPT_REQUEST_TARGET \- specify an alternative target for this request
|
||||
.SH SYNOPSIS
|
||||
#include <curl/curl.h>
|
||||
|
||||
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STRIP_PATH_SLASH, value);
|
||||
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);
|
||||
.SH DESCRIPTION
|
||||
Pass a long set to 1 to tell libcurl to strip out the leading slash from the
|
||||
path when used on the server.
|
||||
Pass a char * to string which libcurl uses in the upcoming request instead of
|
||||
the path as extracted from the URL.
|
||||
.SH DEFAULT
|
||||
0 - use the leading slash.
|
||||
NULL
|
||||
.SH PROTOCOLS
|
||||
HTTP
|
||||
.SH EXAMPLE
|
||||
@ -42,7 +42,7 @@ if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
|
||||
|
||||
/* issue an OPTIONS * request (no leading slash) */
|
||||
curl_easy_setopt(curl, CURLOPT_STRIP_PATH_SLASH, 1L);
|
||||
curl_easy_setopt(curl, CURLOPT_REQUEST_TARGET, "*");
|
||||
|
||||
/* Perform the request */
|
||||
curl_easy_perform(curl);
|
@ -231,6 +231,7 @@ man_MANS = \
|
||||
CURLOPT_READFUNCTION.3 \
|
||||
CURLOPT_REDIR_PROTOCOLS.3 \
|
||||
CURLOPT_REFERER.3 \
|
||||
CURLOPT_REQUEST_TARGET.3 \
|
||||
CURLOPT_RESOLVE.3 \
|
||||
CURLOPT_RESUME_FROM.3 \
|
||||
CURLOPT_RESUME_FROM_LARGE.3 \
|
||||
@ -278,7 +279,6 @@ man_MANS = \
|
||||
CURLOPT_STREAM_DEPENDS.3 \
|
||||
CURLOPT_STREAM_DEPENDS_E.3 \
|
||||
CURLOPT_STREAM_WEIGHT.3 \
|
||||
CURLOPT_STRIP_PATH_SLASH.3 \
|
||||
CURLOPT_SUPPRESS_CONNECT_HEADERS.3 \
|
||||
CURLOPT_TCP_FASTOPEN.3 \
|
||||
CURLOPT_TCP_KEEPALIVE.3 \
|
||||
|
@ -409,7 +409,6 @@ CURLOPT_HTTPPOST 7.1
|
||||
CURLOPT_HTTPPROXYTUNNEL 7.3
|
||||
CURLOPT_HTTPREQUEST 7.1 - 7.15.5
|
||||
CURLOPT_HTTP_CONTENT_DECODING 7.16.2
|
||||
CURLOPT_STRIP_PATH_SLASH 7.55.0
|
||||
CURLOPT_HTTP_TRANSFER_DECODING 7.16.2
|
||||
CURLOPT_HTTP_VERSION 7.9.1
|
||||
CURLOPT_IGNORE_CONTENT_LENGTH 7.14.1
|
||||
@ -509,6 +508,7 @@ CURLOPT_READDATA 7.9.7
|
||||
CURLOPT_READFUNCTION 7.1
|
||||
CURLOPT_REDIR_PROTOCOLS 7.19.4
|
||||
CURLOPT_REFERER 7.1
|
||||
CURLOPT_REQUEST_TARGET 7.55.0
|
||||
CURLOPT_RESOLVE 7.21.3
|
||||
CURLOPT_RESUME_FROM 7.1
|
||||
CURLOPT_RESUME_FROM_LARGE 7.11.0
|
||||
|
@ -1780,8 +1780,8 @@ typedef enum {
|
||||
/* Suppress proxy CONNECT response headers from user callbacks */
|
||||
CINIT(SUPPRESS_CONNECT_HEADERS, LONG, 265),
|
||||
|
||||
/* Strip the initial slash from the path taken from the URL */
|
||||
CINIT(STRIP_PATH_SLASH, LONG, 266),
|
||||
/* The request target, instead of extracted from the URL */
|
||||
CINIT(REQUEST_TARGET, STRINGPOINT, 266),
|
||||
|
||||
CURLOPT_LASTENTRY /* the last unused */
|
||||
} CURLoption;
|
||||
|
@ -2269,8 +2269,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
if(data->set.strip_path_slash)
|
||||
ppath++;
|
||||
if(data->set.str[STRING_TARGET])
|
||||
ppath = data->set.str[STRING_TARGET];
|
||||
|
||||
/* url */
|
||||
if(paste_ftp_userpwd)
|
||||
|
@ -829,9 +829,9 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
|
||||
then this can be changed to HEAD later on) */
|
||||
data->set.httpreq = HTTPREQ_GET;
|
||||
break;
|
||||
case CURLOPT_STRIP_PATH_SLASH:
|
||||
arg = va_arg(param, long);
|
||||
data->set.strip_path_slash = (bool)arg;
|
||||
case CURLOPT_REQUEST_TARGET:
|
||||
result = setstropt(&data->set.str[STRING_TARGET],
|
||||
va_arg(param, char *));
|
||||
break;
|
||||
case CURLOPT_FILETIME:
|
||||
/*
|
||||
|
@ -1588,7 +1588,7 @@ enum dupstring {
|
||||
#ifdef USE_UNIX_SOCKETS
|
||||
STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */
|
||||
#endif
|
||||
|
||||
STRING_TARGET, /* CURLOPT_REQUEST_TARGET */
|
||||
/* -- end of zero-terminated strings -- */
|
||||
|
||||
STRING_LASTZEROTERMINATED,
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -123,7 +123,7 @@ static void free_config_fields(struct OperationConfig *config)
|
||||
Curl_safefree(config->pubkey);
|
||||
Curl_safefree(config->hostpubmd5);
|
||||
Curl_safefree(config->engine);
|
||||
|
||||
Curl_safefree(config->request_target);
|
||||
Curl_safefree(config->customrequest);
|
||||
Curl_safefree(config->krblevel);
|
||||
|
||||
|
@ -139,12 +139,12 @@ struct OperationConfig {
|
||||
bool crlf;
|
||||
char *customrequest;
|
||||
char *krblevel;
|
||||
char *request_target;
|
||||
long httpversion;
|
||||
bool nobuffer;
|
||||
bool readbusy; /* set when reading input returns EAGAIN */
|
||||
bool globoff;
|
||||
bool use_httpget;
|
||||
bool strip_path_slash;
|
||||
bool insecure_ok; /* set TRUE to allow insecure SSL connects */
|
||||
bool proxy_insecure_ok; /* set TRUE to allow insecure SSL connects
|
||||
for proxy */
|
||||
|
@ -257,7 +257,7 @@ static const struct LongShort aliases[]= {
|
||||
{"Fs", "form-string", ARG_STRING},
|
||||
{"g", "globoff", ARG_BOOL},
|
||||
{"G", "get", ARG_NONE},
|
||||
{"Ga", "strip-path-slash", ARG_BOOL},
|
||||
{"Ga", "request-target", ARG_STRING},
|
||||
{"h", "help", ARG_BOOL},
|
||||
{"H", "header", ARG_STRING},
|
||||
{"Hp", "proxy-header", ARG_STRING},
|
||||
@ -1592,8 +1592,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
||||
break;
|
||||
|
||||
case 'G': /* HTTP GET */
|
||||
if(subletter == 'a') { /* --strip-path-slash */
|
||||
config->strip_path_slash = TRUE;
|
||||
if(subletter == 'a') { /* --request-target */
|
||||
GetStr(&config->request_target, nextarg);
|
||||
}
|
||||
else
|
||||
config->use_httpget = TRUE;
|
||||
|
@ -160,8 +160,8 @@ static const struct helptxt helptext[] = {
|
||||
"Disable URL sequences and ranges using {} and []"},
|
||||
{"-I, --head",
|
||||
"Show document info only"},
|
||||
{"-H, --header <header>",
|
||||
"Pass custom header LINE to server"},
|
||||
{"-H, --header <header/@file>",
|
||||
"Pass custom header(s) to server"},
|
||||
{"-h, --help",
|
||||
"This help text"},
|
||||
{" --hostpubmd5 <md5>",
|
||||
@ -298,8 +298,8 @@ static const struct helptxt helptext[] = {
|
||||
"Set a CRL list for proxy"},
|
||||
{" --proxy-digest",
|
||||
"Use Digest authentication on the proxy"},
|
||||
{" --proxy-header <header>",
|
||||
"Pass custom header LINE to proxy"},
|
||||
{" --proxy-header <header/@file>",
|
||||
"Pass custom header(s) to proxy"},
|
||||
{" --proxy-insecure",
|
||||
"Do HTTPS proxy connections without verifying the proxy"},
|
||||
{" --proxy-key <key>",
|
||||
@ -352,6 +352,8 @@ static const struct helptxt helptext[] = {
|
||||
"Set the remote file's time on the local output"},
|
||||
{"-X, --request <command>",
|
||||
"Specify request command to use"},
|
||||
{" --request-target",
|
||||
"Specify the target for this request"},
|
||||
{" --resolve <host:port:address>",
|
||||
"Resolve the host+port to this address"},
|
||||
{" --retry <num>",
|
||||
@ -400,8 +402,6 @@ static const struct helptxt helptext[] = {
|
||||
"Use SSLv3"},
|
||||
{" --stderr",
|
||||
"Where to redirect stderr"},
|
||||
{" --strip-path-slash",
|
||||
"Strip off the first slash of the path"},
|
||||
{" --suppress-connect-headers",
|
||||
"Suppress proxy CONNECT response headers"},
|
||||
{" --tcp-fastopen",
|
||||
|
@ -972,8 +972,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
|
||||
#endif /* !CURL_DISABLE_PROXY */
|
||||
|
||||
my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L);
|
||||
my_setopt(curl, CURLOPT_STRIP_PATH_SLASH,
|
||||
config->strip_path_slash?1L:0L);
|
||||
my_setopt(curl, CURLOPT_REQUEST_TARGET, config->request_target);
|
||||
my_setopt(curl, CURLOPT_UPLOAD, uploadfile?1L:0L);
|
||||
my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly?1L:0L);
|
||||
my_setopt(curl, CURLOPT_APPEND, config->ftp_append?1L:0L);
|
||||
|
@ -3,7 +3,7 @@
|
||||
<keywords>
|
||||
HTTP
|
||||
HTTP GET
|
||||
--strip-path-slash
|
||||
--request-target
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
@ -32,10 +32,10 @@ Funny-head: yesyes
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP GET special path with --strip-path-slash
|
||||
HTTP GET special path with --request-target
|
||||
</name>
|
||||
<command>
|
||||
--strip-path-slash "http://%HOSTIP:%HTTPPORT/XXX" -H "Testno: 1298"
|
||||
--request-target "XXX" "http://%HOSTIP:%HTTPPORT/" -H "Testno: 1298"
|
||||
</command>
|
||||
</client>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
--strip-path-slash
|
||||
--request-target
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
@ -31,10 +31,10 @@ Funny-head: yesyes
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
Send "OPTIONS *" with --strip-path-slash
|
||||
Send "OPTIONS *" with --request-target
|
||||
</name>
|
||||
<command>
|
||||
--strip-path-slash -X OPTIONS http://%HOSTIP:%HTTPPORT/* -H "Testno: 1299"
|
||||
--request-target "*" -X OPTIONS http://%HOSTIP:%HTTPPORT/ -H "Testno: 1299"
|
||||
</command>
|
||||
</client>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user