mirror of
https://github.com/curl/curl.git
synced 2026-07-26 13:27:16 +03:00
- Craig A West brought us: libcurl now defaults to do CONNECT with HTTP
version 1.1 instead of 1.0 like before. This change also introduces the new proxy type for libcurl called 'CURLPROXY_HTTP_1_0' that then allows apps to switch (back) to CONNECT 1.0 requests. The curl tool also got a --proxy1.0 option that works exactly like --proxy but sets CURLPROXY_HTTP_1_0. I updated all test cases cases that use CONNECT and I tried to do some using --proxy1.0 and some updated to do CONNECT 1.1 to get both versions run.
This commit is contained in:
parent
dcf92bffd2
commit
bdd4294e79
28 changed files with 86 additions and 44 deletions
|
|
@ -1894,6 +1894,7 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
|
|||
break;
|
||||
#endif /* CURL_DISABLE_PROXY */
|
||||
case CURLPROXY_HTTP:
|
||||
case CURLPROXY_HTTP_1_0:
|
||||
/* do nothing here. handled later. */
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2009, 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
|
||||
|
|
@ -1343,6 +1343,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
|
|||
char *host=(char *)"";
|
||||
const char *proxyconn="";
|
||||
const char *useragent="";
|
||||
const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ?
|
||||
"1.0" : "1.1";
|
||||
|
||||
if(!checkheaders(data, "Host:")) {
|
||||
host = aprintf("Host: %s\r\n", host_port);
|
||||
|
|
@ -1363,12 +1365,12 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
|
|||
/* BLOCKING */
|
||||
result =
|
||||
add_bufferf(req_buffer,
|
||||
"CONNECT %s:%d HTTP/1.0\r\n"
|
||||
"CONNECT %s:%d HTTP/%s\r\n"
|
||||
"%s" /* Host: */
|
||||
"%s" /* Proxy-Authorization */
|
||||
"%s" /* User-Agent */
|
||||
"%s", /* Proxy-Connection */
|
||||
hostname, remote_port,
|
||||
hostname, remote_port, http,
|
||||
host,
|
||||
conn->allocptr.proxyuserpwd?
|
||||
conn->allocptr.proxyuserpwd:"",
|
||||
|
|
|
|||
14
lib/url.c
14
lib/url.c
|
|
@ -1453,7 +1453,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||
|
||||
case CURLOPT_PROXYTYPE:
|
||||
/*
|
||||
* Set proxy type. HTTP/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME
|
||||
* Set proxy type. HTTP/HTTP_1_0/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME
|
||||
*/
|
||||
data->set.proxytype = (curl_proxytype)va_arg(param, long);
|
||||
break;
|
||||
|
|
@ -2857,6 +2857,7 @@ static CURLcode ConnectPlease(struct SessionHandle *data,
|
|||
break;
|
||||
#endif /* CURL_DISABLE_PROXY */
|
||||
case CURLPROXY_HTTP:
|
||||
case CURLPROXY_HTTP_1_0:
|
||||
/* do nothing here. handled later. */
|
||||
break;
|
||||
default:
|
||||
|
|
@ -4214,9 +4215,11 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||
|
||||
conn->bits.proxy = (bool)(data->set.str[STRING_PROXY] &&
|
||||
*data->set.str[STRING_PROXY]);
|
||||
conn->bits.httpproxy = (bool)(conn->bits.proxy
|
||||
&& (conn->proxytype == CURLPROXY_HTTP));
|
||||
conn->bits.proxy_user_passwd = (bool)(NULL != data->set.str[STRING_PROXYUSERNAME]);
|
||||
conn->bits.httpproxy = (bool)(conn->bits.proxy &&
|
||||
(conn->proxytype == CURLPROXY_HTTP ||
|
||||
conn->proxytype == CURLPROXY_HTTP_1_0));
|
||||
conn->bits.proxy_user_passwd =
|
||||
(bool)(NULL != data->set.str[STRING_PROXYUSERNAME]);
|
||||
conn->bits.tunnel_proxy = data->set.tunnel_thru_httpproxy;
|
||||
|
||||
#endif /* CURL_DISABLE_PROXY */
|
||||
|
|
@ -4315,7 +4318,8 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||
if(proxy && *proxy) {
|
||||
long bits = conn->protocol & (PROT_HTTPS|PROT_SSL|PROT_MISSING);
|
||||
|
||||
if(conn->proxytype == CURLPROXY_HTTP) {
|
||||
if((conn->proxytype == CURLPROXY_HTTP) ||
|
||||
(conn->proxytype == CURLPROXY_HTTP_1_0)) {
|
||||
/* force this connection's protocol to become HTTP */
|
||||
conn->protocol = PROT_HTTP | bits;
|
||||
conn->bits.httpproxy = TRUE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue