From e39754f6a242c99a80a274280b61e884e5abcc7e Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 11 Apr 2023 11:20:12 +0200 Subject: [PATCH] curl: add --proxy-http2 For trying HTTP/2 with an HTTPS proxy. Closes #10926 --- docs/cmdline-opts/Makefile.inc | 1 + docs/cmdline-opts/proxy-http2.d | 18 ++++++++++++++++++ docs/options-in-versions | 1 + src/tool_getparam.c | 8 +++++++- src/tool_listhelp.c | 5 ++++- 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 docs/cmdline-opts/proxy-http2.d diff --git a/docs/cmdline-opts/Makefile.inc b/docs/cmdline-opts/Makefile.inc index ffc9169d3f..208a66718c 100644 --- a/docs/cmdline-opts/Makefile.inc +++ b/docs/cmdline-opts/Makefile.inc @@ -178,6 +178,7 @@ DPAGES = \ proxy-crlfile.d \ proxy-digest.d \ proxy-header.d \ + proxy-http2.d \ proxy-insecure.d \ proxy-key-type.d \ proxy-key.d \ diff --git a/docs/cmdline-opts/proxy-http2.d b/docs/cmdline-opts/proxy-http2.d new file mode 100644 index 0000000000..3edadb2d4d --- /dev/null +++ b/docs/cmdline-opts/proxy-http2.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-http2 +Tags: Versions HTTP/2 +Protocols: HTTP +Added: 8.1.0 +Mutexed: +Requires: HTTP/2 +See-also: proxy +Help: Use HTTP/2 with HTTPS proxy +Category: http proxy +Example: --proxy-http2 -x proxy $URL +Multi: boolean +--- +Tells curl to try negotiate HTTP version 2 with a HTTPS proxy. The proxy might +still only offer HTTP/1 and then curl will stick to using that version. + +This has no effect for any other kinds of proxies. diff --git a/docs/options-in-versions b/docs/options-in-versions index 0398373206..d34dd33f01 100644 --- a/docs/options-in-versions +++ b/docs/options-in-versions @@ -165,6 +165,7 @@ --proxy-crlfile 7.52.0 --proxy-digest 7.12.0 --proxy-header 7.37.0 +--proxy-http2 8.1.0 --proxy-insecure 7.52.0 --proxy-key 7.52.0 --proxy-key-type 7.52.0 diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 6d6cac3dbd..b33e60300a 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -211,6 +211,7 @@ static const struct LongShort aliases[]= { {"04", "http3", ARG_NONE}, {"05", "http3-only", ARG_NONE}, {"09", "http0.9", ARG_BOOL}, + {"0a", "proxy-http2", ARG_BOOL}, {"1", "tlsv1", ARG_NONE}, {"10", "tlsv1.0", ARG_NONE}, {"11", "tlsv1.1", ARG_NONE}, @@ -1449,6 +1450,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ /* Allow HTTP/0.9 responses! */ config->http09_allowed = toggle; break; + case 'a': + /* --proxy-http2 */ + config->proxyver = CURLPROXY_HTTPS2; + break; } break; case '1': /* --tlsv1* options */ @@ -2373,7 +2378,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ default: /* --proxy */ GetStr(&config->proxy, nextarg); - config->proxyver = CURLPROXY_HTTP; + if(config->proxyver != CURLPROXY_HTTPS2) + config->proxyver = CURLPROXY_HTTP; break; } break; diff --git a/src/tool_listhelp.c b/src/tool_listhelp.c index 7611cf6a0a..61550de72d 100644 --- a/src/tool_listhelp.c +++ b/src/tool_listhelp.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) Daniel Stenberg, , et al. + * Copyright (C) Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -498,6 +498,9 @@ const struct helptxt helptext[] = { {" --proxy-header
", "Pass custom header(s) to proxy", CURLHELP_PROXY}, + {" --proxy-http2", + "Use HTTP/2 with HTTPS proxy", + CURLHELP_HTTP | CURLHELP_PROXY}, {" --proxy-insecure", "Do HTTPS proxy connections without verifying the proxy", CURLHELP_PROXY | CURLHELP_TLS},