mirror of
https://github.com/moparisthebest/curl
synced 2025-01-11 05:58:01 -05:00
CURLINFO_EFFECTIVE_METHOD: added
Provide the HTTP method that was used on the latest request, which might be relevant for users when there was one or more redirects involved. Closes #5511
This commit is contained in:
parent
8fa3f7809a
commit
d75e3ab74c
@ -41,6 +41,9 @@ You should not free the memory returned by this function unless it is
|
|||||||
explicitly mentioned below.
|
explicitly mentioned below.
|
||||||
.SH AVAILABLE INFORMATION
|
.SH AVAILABLE INFORMATION
|
||||||
The following information can be extracted:
|
The following information can be extracted:
|
||||||
|
.IP CURLINFO_EFFECTIVE_METHOD
|
||||||
|
Last used HTTP method.
|
||||||
|
See \fICURLINFO_EFFECTIVE_METHOD(3)\fP
|
||||||
.IP CURLINFO_EFFECTIVE_URL
|
.IP CURLINFO_EFFECTIVE_URL
|
||||||
Last used URL.
|
Last used URL.
|
||||||
See \fICURLINFO_EFFECTIVE_URL(3)\fP
|
See \fICURLINFO_EFFECTIVE_URL(3)\fP
|
||||||
|
68
docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
Normal file
68
docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
.\" **************************************************************************
|
||||||
|
.\" * _ _ ____ _
|
||||||
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2020, 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
|
||||||
|
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
.\" *
|
||||||
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
.\" * copies of the Software, and permit persons to whom the Software is
|
||||||
|
.\" * furnished to do so, under the terms of the COPYING file.
|
||||||
|
.\" *
|
||||||
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
.\" * KIND, either express or implied.
|
||||||
|
.\" *
|
||||||
|
.\" **************************************************************************
|
||||||
|
.\"
|
||||||
|
.TH CURLINFO_EFFECTIVE_METHOD 3 "28 Aug 2015" "libcurl 7.72.0" "curl_easy_getinfo options"
|
||||||
|
.SH NAME
|
||||||
|
CURLINFO_EFFECTIVE_METHOD \- get the last used HTTP method
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_METHOD,
|
||||||
|
char **methodp);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Pass in a pointer to a char pointer and get the last used effective HTTP
|
||||||
|
method.
|
||||||
|
|
||||||
|
In cases when you've asked libcurl to follow redirects, the method may very
|
||||||
|
well not be the same method the first request would use.
|
||||||
|
|
||||||
|
The \fBmethodp\fP pointer will be NULL or pointing to private memory you MUST
|
||||||
|
NOT free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
|
||||||
|
corresponding CURL handle.
|
||||||
|
.SH PROTOCOLS
|
||||||
|
HTTP(S)
|
||||||
|
.SH EXAMPLE
|
||||||
|
.nf
|
||||||
|
CURL *curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
CURLcode res;
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if(res == CURLE_OK) {
|
||||||
|
char *method = NULL;
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method);
|
||||||
|
if(method)
|
||||||
|
printf("Redirected to method: %s\\n", method);
|
||||||
|
}
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
.fi
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in 7.72.0
|
||||||
|
.SH RETURN VALUE
|
||||||
|
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
|
@ -35,6 +35,7 @@ man_MANS = \
|
|||||||
CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 \
|
CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 \
|
||||||
CURLINFO_CONTENT_TYPE.3 \
|
CURLINFO_CONTENT_TYPE.3 \
|
||||||
CURLINFO_COOKIELIST.3 \
|
CURLINFO_COOKIELIST.3 \
|
||||||
|
CURLINFO_EFFECTIVE_METHOD.3 \
|
||||||
CURLINFO_EFFECTIVE_URL.3 \
|
CURLINFO_EFFECTIVE_URL.3 \
|
||||||
CURLINFO_FILETIME.3 \
|
CURLINFO_FILETIME.3 \
|
||||||
CURLINFO_FILETIME_T.3 \
|
CURLINFO_FILETIME_T.3 \
|
||||||
|
@ -229,6 +229,7 @@ CURLINFO_COOKIELIST 7.14.1
|
|||||||
CURLINFO_DATA_IN 7.9.6
|
CURLINFO_DATA_IN 7.9.6
|
||||||
CURLINFO_DATA_OUT 7.9.6
|
CURLINFO_DATA_OUT 7.9.6
|
||||||
CURLINFO_DOUBLE 7.4.1
|
CURLINFO_DOUBLE 7.4.1
|
||||||
|
CURLINFO_EFFECTIVE_METHOD 7.72.0
|
||||||
CURLINFO_EFFECTIVE_URL 7.4
|
CURLINFO_EFFECTIVE_URL 7.4
|
||||||
CURLINFO_END 7.9.6
|
CURLINFO_END 7.9.6
|
||||||
CURLINFO_FILETIME 7.5
|
CURLINFO_FILETIME 7.5
|
||||||
|
@ -2634,10 +2634,6 @@ typedef enum {
|
|||||||
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
||||||
CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
|
CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
|
||||||
CURLINFO_SCHEME = CURLINFO_STRING + 49,
|
CURLINFO_SCHEME = CURLINFO_STRING + 49,
|
||||||
/* Fill in new entries below here! */
|
|
||||||
|
|
||||||
/* Preferably these would be defined conditionally based on the
|
|
||||||
sizeof curl_off_t being 64-bits */
|
|
||||||
CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50,
|
CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50,
|
||||||
CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51,
|
CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51,
|
||||||
CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52,
|
CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52,
|
||||||
@ -2646,6 +2642,7 @@ typedef enum {
|
|||||||
CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55,
|
CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55,
|
||||||
CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56,
|
CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56,
|
||||||
CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57,
|
CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57,
|
||||||
|
CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58,
|
||||||
|
|
||||||
CURLINFO_LASTONE = 57
|
CURLINFO_LASTONE = 57
|
||||||
} CURLINFO;
|
} CURLINFO;
|
||||||
|
@ -95,6 +95,34 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
|||||||
case CURLINFO_EFFECTIVE_URL:
|
case CURLINFO_EFFECTIVE_URL:
|
||||||
*param_charp = data->change.url?data->change.url:(char *)"";
|
*param_charp = data->change.url?data->change.url:(char *)"";
|
||||||
break;
|
break;
|
||||||
|
case CURLINFO_EFFECTIVE_METHOD: {
|
||||||
|
const char *m = data->set.str[STRING_CUSTOMREQUEST];
|
||||||
|
if(!m) {
|
||||||
|
if(data->set.opt_no_body)
|
||||||
|
m = "HEAD";
|
||||||
|
else {
|
||||||
|
switch(data->state.httpreq) {
|
||||||
|
case HTTPREQ_POST:
|
||||||
|
case HTTPREQ_POST_FORM:
|
||||||
|
case HTTPREQ_POST_MIME:
|
||||||
|
m = "POST";
|
||||||
|
break;
|
||||||
|
case HTTPREQ_PUT:
|
||||||
|
m = "PUT";
|
||||||
|
break;
|
||||||
|
default: /* this should never happen */
|
||||||
|
case HTTPREQ_GET:
|
||||||
|
m = "GET";
|
||||||
|
break;
|
||||||
|
case HTTPREQ_HEAD:
|
||||||
|
m = "HEAD";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*param_charp = m;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case CURLINFO_CONTENT_TYPE:
|
case CURLINFO_CONTENT_TYPE:
|
||||||
*param_charp = data->info.contenttype;
|
*param_charp = data->info.contenttype;
|
||||||
break;
|
break;
|
||||||
|
@ -2014,9 +2014,6 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||||||
case HTTPREQ_PUT:
|
case HTTPREQ_PUT:
|
||||||
request = "PUT";
|
request = "PUT";
|
||||||
break;
|
break;
|
||||||
case HTTPREQ_OPTIONS:
|
|
||||||
request = "OPTIONS";
|
|
||||||
break;
|
|
||||||
default: /* this should never happen */
|
default: /* this should never happen */
|
||||||
case HTTPREQ_GET:
|
case HTTPREQ_GET:
|
||||||
request = "GET";
|
request = "GET";
|
||||||
|
@ -1195,7 +1195,6 @@ typedef enum {
|
|||||||
HTTPREQ_POST_MIME, /* we make a difference internally */
|
HTTPREQ_POST_MIME, /* we make a difference internally */
|
||||||
HTTPREQ_PUT,
|
HTTPREQ_PUT,
|
||||||
HTTPREQ_HEAD,
|
HTTPREQ_HEAD,
|
||||||
HTTPREQ_OPTIONS,
|
|
||||||
HTTPREQ_LAST /* last in list */
|
HTTPREQ_LAST /* last in list */
|
||||||
} Curl_HttpReq;
|
} Curl_HttpReq;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user