From f5e6907d5232ca9c05cb8a0b99d809590ddcde18 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 13 Jul 2020 09:58:29 +0200 Subject: [PATCH] curl: add %{method} to the -w variables Gets the CURLINFO_EFFECTIVE_METHOD from libcurl. Added test 1197 to verify. --- docs/cmdline-opts/write-out.d | 3 ++ src/tool_writeout.c | 9 ++++ src/tool_writeout.h | 1 + tests/data/Makefile.inc | 2 +- tests/data/test1197 | 88 +++++++++++++++++++++++++++++++++++ tests/data/test970 | 2 +- 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 tests/data/test1197 diff --git a/docs/cmdline-opts/write-out.d b/docs/cmdline-opts/write-out.d index 9786a9af4..686bda6ea 100644 --- a/docs/cmdline-opts/write-out.d +++ b/docs/cmdline-opts/write-out.d @@ -60,6 +60,9 @@ either IPv4 or IPv6 (Added in 7.29.0) .B local_port The local port number of the most recently done connection (Added in 7.29.0) .TP +.B method +The http method used in the most recent HTTP request (Added in 7.72.0) +.TP .B num_connects Number of new connects made in the recent transfer. (Added in 7.12.3) .TP diff --git a/src/tool_writeout.c b/src/tool_writeout.c index d8ccbcbda..41441ff30 100644 --- a/src/tool_writeout.c +++ b/src/tool_writeout.c @@ -32,6 +32,8 @@ static const struct writeoutvar variables[] = { {"url_effective", VAR_EFFECTIVE_URL, 0, CURLINFO_EFFECTIVE_URL, JSON_STRING}, + {"method", VAR_EFFECTIVE_METHOD, 0, + CURLINFO_EFFECTIVE_METHOD, JSON_STRING}, {"http_code", VAR_HTTP_CODE, 0, CURLINFO_RESPONSE_CODE, JSON_LONG}, {"response_code", VAR_HTTP_CODE, 0, @@ -142,6 +144,13 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo) && stringp) fputs(stringp, stream); break; + case VAR_EFFECTIVE_METHOD: + if((CURLE_OK == curl_easy_getinfo(curl, + CURLINFO_EFFECTIVE_METHOD, + &stringp)) + && stringp) + fputs(stringp, stream); + break; case VAR_HTTP_CODE: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &longinfo)) diff --git a/src/tool_writeout.h b/src/tool_writeout.h index a21787ab9..68bacb9d4 100644 --- a/src/tool_writeout.h +++ b/src/tool_writeout.h @@ -39,6 +39,7 @@ typedef enum { VAR_HTTP_CODE_PROXY, VAR_HEADER_SIZE, VAR_REQUEST_SIZE, + VAR_EFFECTIVE_METHOD, VAR_EFFECTIVE_URL, VAR_CONTENT_TYPE, VAR_NUM_CONNECTS, diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index eaf347d91..667d7951a 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -141,7 +141,7 @@ test1168 \ test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 \ test1178 test1179 \ \ -test1190 test1191 test1192 test1193 test1194 test1195 test1196 \ +test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 \ \ test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ diff --git a/tests/data/test1197 b/tests/data/test1197 new file mode 100644 index 000000000..96d368f8b --- /dev/null +++ b/tests/data/test1197 @@ -0,0 +1,88 @@ + + + +HTTP +HTTP GET +followlocation +--write-out + + + +# +# Server-side + + +HTTP/1.1 302 OK swsbounce swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close +Content-Type: text/plain +Location: ./11970001 + +monster + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 15 +Connection: close +Content-Type: text/plain; charset=us-ascii + +bigger monster + + + + +# +# Client-side + + +http + + +HTTP POST redirected to GET and --write-out method + + +http://%HOSTIP:%HTTPPORT/1197 -w "%{method}\n" -L -d "twinkle twinkle little star" + + + +# +# Verify data after the test has been "shot" + + +^User-Agent:.* + + +POST /1197 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* +Content-Length: 27 +Content-Type: application/x-www-form-urlencoded + +twinkle twinkle little starGET /11970001 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* + + + + +HTTP/1.1 302 OK swsbounce swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 8 +Connection: close +Content-Type: text/plain +Location: ./11970001 + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Content-Length: 15 +Connection: close +Content-Type: text/plain; charset=us-ascii + +bigger monster +GET + + + + diff --git a/tests/data/test970 b/tests/data/test970 index e6d138f49..c0a88a798 100644 --- a/tests/data/test970 +++ b/tests/data/test970 @@ -61,7 +61,7 @@ Accept: */* -{"url_effective":"http://%HOSTIP:%HTTPPORT/970","http_code":200,"response_code":200,"http_connect":0,"time_total":0.000013,"time_namelookup":0.000013,"time_connect":0.000013,"time_appconnect":0.000013,"time_pretransfer":0.000013,"time_starttransfer":0.000013,"size_header":4019,"size_request":4019,"size_download":445,"size_upload":0,"speed_download":13,"speed_upload":13,"content_type":"text/html","num_connects":1,"time_redirect":0.000013,"num_redirects":0,"ssl_verify_result":0,"proxy_ssl_verify_result":0,"filename_effective":"log/out970","remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"local_ip":"127.0.0.1","local_port":13,"http_version":"1.1","scheme":"HTTP","curl_version":"curl-unit-test-fake-version"} +{"url_effective":"http://%HOSTIP:%HTTPPORT/970","method":"GET","http_code":200,"response_code":200,"http_connect":0,"time_total":0.000013,"time_namelookup":0.000013,"time_connect":0.000013,"time_appconnect":0.000013,"time_pretransfer":0.000013,"time_starttransfer":0.000013,"size_header":4019,"size_request":4019,"size_download":445,"size_upload":0,"speed_download":13,"speed_upload":13,"content_type":"text/html","num_connects":1,"time_redirect":0.000013,"num_redirects":0,"ssl_verify_result":0,"proxy_ssl_verify_result":0,"filename_effective":"log/out970","remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"local_ip":"127.0.0.1","local_port":13,"http_version":"1.1","scheme":"HTTP","curl_version":"curl-unit-test-fake-version"}