mirror of
https://github.com/moparisthebest/curl
synced 2024-12-23 08:38:49 -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.
|
||||
.SH AVAILABLE INFORMATION
|
||||
The following information can be extracted:
|
||||
.IP CURLINFO_EFFECTIVE_METHOD
|
||||
Last used HTTP method.
|
||||
See \fICURLINFO_EFFECTIVE_METHOD(3)\fP
|
||||
.IP CURLINFO_EFFECTIVE_URL
|
||||
Last used URL.
|
||||
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_TYPE.3 \
|
||||
CURLINFO_COOKIELIST.3 \
|
||||
CURLINFO_EFFECTIVE_METHOD.3 \
|
||||
CURLINFO_EFFECTIVE_URL.3 \
|
||||
CURLINFO_FILETIME.3 \
|
||||
CURLINFO_FILETIME_T.3 \
|
||||
|
@ -229,6 +229,7 @@ CURLINFO_COOKIELIST 7.14.1
|
||||
CURLINFO_DATA_IN 7.9.6
|
||||
CURLINFO_DATA_OUT 7.9.6
|
||||
CURLINFO_DOUBLE 7.4.1
|
||||
CURLINFO_EFFECTIVE_METHOD 7.72.0
|
||||
CURLINFO_EFFECTIVE_URL 7.4
|
||||
CURLINFO_END 7.9.6
|
||||
CURLINFO_FILETIME 7.5
|
||||
|
@ -2634,10 +2634,6 @@ typedef enum {
|
||||
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
||||
CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
|
||||
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_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51,
|
||||
CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52,
|
||||
@ -2646,6 +2642,7 @@ typedef enum {
|
||||
CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55,
|
||||
CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56,
|
||||
CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57,
|
||||
CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58,
|
||||
|
||||
CURLINFO_LASTONE = 57
|
||||
} CURLINFO;
|
||||
|
@ -95,6 +95,34 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
||||
case CURLINFO_EFFECTIVE_URL:
|
||||
*param_charp = data->change.url?data->change.url:(char *)"";
|
||||
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:
|
||||
*param_charp = data->info.contenttype;
|
||||
break;
|
||||
|
@ -2014,9 +2014,6 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
||||
case HTTPREQ_PUT:
|
||||
request = "PUT";
|
||||
break;
|
||||
case HTTPREQ_OPTIONS:
|
||||
request = "OPTIONS";
|
||||
break;
|
||||
default: /* this should never happen */
|
||||
case HTTPREQ_GET:
|
||||
request = "GET";
|
||||
|
@ -1195,7 +1195,6 @@ typedef enum {
|
||||
HTTPREQ_POST_MIME, /* we make a difference internally */
|
||||
HTTPREQ_PUT,
|
||||
HTTPREQ_HEAD,
|
||||
HTTPREQ_OPTIONS,
|
||||
HTTPREQ_LAST /* last in list */
|
||||
} Curl_HttpReq;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user