mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
preproxy: renamed what was added as SOCKS_PROXY
CURLOPT_SOCKS_PROXY -> CURLOPT_PRE_PROXY Added the corresponding --preroxy command line option. Sets a SOCKS proxy to connect to _before_ connecting to a HTTP(S) proxy.
This commit is contained in:
parent
642398c651
commit
845522cadb
21
docs/cmdline-opts/preproxy.d
Normal file
21
docs/cmdline-opts/preproxy.d
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Long: preproxy
|
||||||
|
Arg: [protocol://]host[:port]
|
||||||
|
Help: Use this proxy first
|
||||||
|
Added: 7.52.0
|
||||||
|
---
|
||||||
|
Use the specified proxy before connecting to the ordinary proxy. Hence pre
|
||||||
|
proxy. A pre proxy must be a SOCKS speaking proxy.
|
||||||
|
|
||||||
|
The pre proxy string should be specified with a protocol:// prefix to specify
|
||||||
|
alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
|
||||||
|
socks5h:// to request the specific SOCKS version to be used. No protocol
|
||||||
|
specified will make curl default to SOCKS4.
|
||||||
|
|
||||||
|
If the port number is not specified in the proxy string, it is assumed to be
|
||||||
|
1080.
|
||||||
|
|
||||||
|
User and password that might be provided in the proxy string are URL decoded
|
||||||
|
by curl. This allows you to pass in special characters such as @ by using %40
|
||||||
|
or pass in a colon with %3a.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
19
docs/curl.1
19
docs/curl.1
@ -1298,6 +1298,25 @@ is used in conjunction with the user name which can be specified as part of the
|
|||||||
The Bearer Token and user name are formatted according to RFC 6750.
|
The Bearer Token and user name are formatted according to RFC 6750.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--preproxy [protocol://]host[:port]"
|
||||||
|
Use the specified proxy before connecting to the ordinary proxy. Hence pre
|
||||||
|
proxy. A pre proxy must be a SOCKS speaking proxy.
|
||||||
|
|
||||||
|
The pre proxy string should be specified with a protocol:// prefix to specify
|
||||||
|
alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
|
||||||
|
socks5h:// to request the specific SOCKS version to be used. No protocol
|
||||||
|
specified will make curl default to SOCKS4.
|
||||||
|
|
||||||
|
If the port number is not specified in the proxy string, it is assumed to be
|
||||||
|
1080.
|
||||||
|
|
||||||
|
User and password that might be provided in the proxy string are URL decoded
|
||||||
|
by curl. This allows you to pass in special characters such as @ by using %40
|
||||||
|
or pass in a colon with %3a.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
|
||||||
|
Added in 7.52.0.
|
||||||
.IP "--proxy-header <header>"
|
.IP "--proxy-header <header>"
|
||||||
(HTTP) Extra header to include in the request when sending HTTP to a
|
(HTTP) Extra header to include in the request when sending HTTP to a
|
||||||
proxy. You may specify any number of extra headers. This is the equivalent
|
proxy. You may specify any number of extra headers. This is the equivalent
|
||||||
|
@ -20,15 +20,15 @@
|
|||||||
.\" *
|
.\" *
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH CURLOPT_SOCKS_PROXY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
|
.TH CURLOPT_PRE_PROXY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt options"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
CURLOPT_SOCKS_PROXY \- set SOCKS proxy to use
|
CURLOPT_PRE_PROXY \- set pre-proxy to use
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS_PROXY, char *proxy);
|
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Set the SOCKS \fIproxy\fP to use for the upcoming request. The parameter
|
Set the \fIpreproxy\fP to use for the upcoming request. The parameter
|
||||||
should be a char * to a zero terminated string holding the host name or dotted
|
should be a char * to a zero terminated string holding the host name or dotted
|
||||||
numerical IP address. A numerical IPv6 address must be written within
|
numerical IP address. A numerical IPv6 address must be written within
|
||||||
[brackets].
|
[brackets].
|
||||||
@ -38,16 +38,20 @@ name. The proxy's port number may optionally be specified with the separate
|
|||||||
option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
|
option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
|
||||||
using port 1080 for proxies.
|
using port 1080 for proxies.
|
||||||
|
|
||||||
The proxy string may be prefixed with [scheme]:// to specify which kind of
|
A pre proxy is a SOCKS proxy that curl connects to before it connects to the
|
||||||
proxy is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last
|
HTTP(S) proxy specified in the \fICURLOPT_PROXY\fP option. The pre proxy can
|
||||||
|
only be a SOCKS proxy.
|
||||||
|
|
||||||
|
The pre proxy string should be prefixed with [scheme]:// to specify which kind
|
||||||
|
of socks is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last
|
||||||
one to enable socks5 and asking the proxy to do the resolving, also known as
|
one to enable socks5 and asking the proxy to do the resolving, also known as
|
||||||
\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
|
\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
|
||||||
be used. Otherwise SOCKS4 is used as default.
|
be used. Otherwise SOCKS4 is used as default.
|
||||||
|
|
||||||
Setting the proxy string to "" (an empty string) will explicitly disable the
|
Setting the pre proxy string to "" (an empty string) will explicitly disable
|
||||||
use of a proxy, even if there is an environment variable set for it.
|
the use of a pre proxy.
|
||||||
.SH DEFAULT
|
.SH DEFAULT
|
||||||
Default is NULL, meaning no socks proxy is used.
|
Default is NULL, meaning no pre proxy is used.
|
||||||
|
|
||||||
When you set a host name to use, do not assume that there's any particular
|
When you set a host name to use, do not assume that there's any particular
|
||||||
single port number used widely for proxies. Specify it!
|
single port number used widely for proxies. Specify it!
|
@ -212,6 +212,7 @@ man_MANS = \
|
|||||||
CURLOPT_POSTQUOTE.3 \
|
CURLOPT_POSTQUOTE.3 \
|
||||||
CURLOPT_POSTREDIR.3 \
|
CURLOPT_POSTREDIR.3 \
|
||||||
CURLOPT_PREQUOTE.3 \
|
CURLOPT_PREQUOTE.3 \
|
||||||
|
CURLOPT_PRE_PROXY.3 \
|
||||||
CURLOPT_PRIVATE.3 \
|
CURLOPT_PRIVATE.3 \
|
||||||
CURLOPT_PROGRESSDATA.3 \
|
CURLOPT_PROGRESSDATA.3 \
|
||||||
CURLOPT_PROGRESSFUNCTION.3 \
|
CURLOPT_PROGRESSFUNCTION.3 \
|
||||||
@ -269,7 +270,6 @@ man_MANS = \
|
|||||||
CURLOPT_SOCKOPTFUNCTION.3 \
|
CURLOPT_SOCKOPTFUNCTION.3 \
|
||||||
CURLOPT_SOCKS5_GSSAPI_NEC.3 \
|
CURLOPT_SOCKS5_GSSAPI_NEC.3 \
|
||||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \
|
CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \
|
||||||
CURLOPT_SOCKS_PROXY.3 \
|
|
||||||
CURLOPT_SSH_AUTH_TYPES.3 \
|
CURLOPT_SSH_AUTH_TYPES.3 \
|
||||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \
|
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \
|
||||||
CURLOPT_SSH_KEYDATA.3 \
|
CURLOPT_SSH_KEYDATA.3 \
|
||||||
@ -522,6 +522,7 @@ HTMLPAGES = \
|
|||||||
CURLOPT_POSTQUOTE.html \
|
CURLOPT_POSTQUOTE.html \
|
||||||
CURLOPT_POSTREDIR.html \
|
CURLOPT_POSTREDIR.html \
|
||||||
CURLOPT_PREQUOTE.html \
|
CURLOPT_PREQUOTE.html \
|
||||||
|
CURLOPT_PRE_PROXY.html \
|
||||||
CURLOPT_PRIVATE.html \
|
CURLOPT_PRIVATE.html \
|
||||||
CURLOPT_PROGRESSDATA.html \
|
CURLOPT_PROGRESSDATA.html \
|
||||||
CURLOPT_PROGRESSFUNCTION.html \
|
CURLOPT_PROGRESSFUNCTION.html \
|
||||||
@ -579,7 +580,6 @@ HTMLPAGES = \
|
|||||||
CURLOPT_SOCKOPTFUNCTION.html \
|
CURLOPT_SOCKOPTFUNCTION.html \
|
||||||
CURLOPT_SOCKS5_GSSAPI_NEC.html \
|
CURLOPT_SOCKS5_GSSAPI_NEC.html \
|
||||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.html \
|
CURLOPT_SOCKS5_GSSAPI_SERVICE.html \
|
||||||
CURLOPT_SOCKS_PROXY.html \
|
|
||||||
CURLOPT_SSH_AUTH_TYPES.html \
|
CURLOPT_SSH_AUTH_TYPES.html \
|
||||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html \
|
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html \
|
||||||
CURLOPT_SSH_KEYDATA.html \
|
CURLOPT_SSH_KEYDATA.html \
|
||||||
@ -832,6 +832,7 @@ PDFPAGES = \
|
|||||||
CURLOPT_POSTQUOTE.pdf \
|
CURLOPT_POSTQUOTE.pdf \
|
||||||
CURLOPT_POSTREDIR.pdf \
|
CURLOPT_POSTREDIR.pdf \
|
||||||
CURLOPT_PREQUOTE.pdf \
|
CURLOPT_PREQUOTE.pdf \
|
||||||
|
CURLOPT_PRE_PROXY.pdf \
|
||||||
CURLOPT_PRIVATE.pdf \
|
CURLOPT_PRIVATE.pdf \
|
||||||
CURLOPT_PROGRESSDATA.pdf \
|
CURLOPT_PROGRESSDATA.pdf \
|
||||||
CURLOPT_PROGRESSFUNCTION.pdf \
|
CURLOPT_PROGRESSFUNCTION.pdf \
|
||||||
@ -889,7 +890,6 @@ PDFPAGES = \
|
|||||||
CURLOPT_SOCKOPTFUNCTION.pdf \
|
CURLOPT_SOCKOPTFUNCTION.pdf \
|
||||||
CURLOPT_SOCKS5_GSSAPI_NEC.pdf \
|
CURLOPT_SOCKS5_GSSAPI_NEC.pdf \
|
||||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf \
|
CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf \
|
||||||
CURLOPT_SOCKS_PROXY.pdf \
|
|
||||||
CURLOPT_SSH_AUTH_TYPES.pdf \
|
CURLOPT_SSH_AUTH_TYPES.pdf \
|
||||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf \
|
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf \
|
||||||
CURLOPT_SSH_KEYDATA.pdf \
|
CURLOPT_SSH_KEYDATA.pdf \
|
||||||
|
@ -1763,8 +1763,8 @@ typedef enum {
|
|||||||
CURLSSLOPT_* */
|
CURLSSLOPT_* */
|
||||||
CINIT(PROXY_SSL_OPTIONS, LONG, 261),
|
CINIT(PROXY_SSL_OPTIONS, LONG, 261),
|
||||||
|
|
||||||
/* Name of socks proxy to use. */
|
/* Name of pre proxy to use. */
|
||||||
CINIT(SOCKS_PROXY, STRINGPOINT, 262),
|
CINIT(PRE_PROXY, STRINGPOINT, 262),
|
||||||
|
|
||||||
/* The public key in DER form used to validate the proxy public key
|
/* The public key in DER form used to validate the proxy public key
|
||||||
this option is used only if PROXY_SSL_VERIFYPEER is true */
|
this option is used only if PROXY_SSL_VERIFYPEER is true */
|
||||||
|
10
lib/url.c
10
lib/url.c
@ -1472,14 +1472,14 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
|
|||||||
va_arg(param, char *));
|
va_arg(param, char *));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURLOPT_SOCKS_PROXY:
|
case CURLOPT_PRE_PROXY:
|
||||||
/*
|
/*
|
||||||
* Set proxy server:port to use as SOCKS proxy.
|
* Set proxy server:port to use as SOCKS proxy.
|
||||||
*
|
*
|
||||||
* If the proxy is set to "" or NULL we explicitly say that we don't want
|
* If the proxy is set to "" or NULL we explicitly say that we don't want
|
||||||
* to use the socks proxy.
|
* to use the socks proxy.
|
||||||
*/
|
*/
|
||||||
result = setstropt(&data->set.str[STRING_SOCKS_PROXY],
|
result = setstropt(&data->set.str[STRING_PRE_PROXY],
|
||||||
va_arg(param, char *));
|
va_arg(param, char *));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4126,7 +4126,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
|
|||||||
conn->bits.socksproxy = (conn->bits.proxy &&
|
conn->bits.socksproxy = (conn->bits.proxy &&
|
||||||
!conn->bits.httpproxy) ? TRUE : FALSE;
|
!conn->bits.httpproxy) ? TRUE : FALSE;
|
||||||
|
|
||||||
if(data->set.str[STRING_SOCKS_PROXY] && *data->set.str[STRING_SOCKS_PROXY]) {
|
if(data->set.str[STRING_PRE_PROXY] && *data->set.str[STRING_PRE_PROXY]) {
|
||||||
conn->bits.proxy = TRUE;
|
conn->bits.proxy = TRUE;
|
||||||
conn->bits.socksproxy = TRUE;
|
conn->bits.socksproxy = TRUE;
|
||||||
}
|
}
|
||||||
@ -6184,8 +6184,8 @@ static CURLcode create_conn(struct Curl_easy *data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data->set.str[STRING_SOCKS_PROXY]) {
|
if(data->set.str[STRING_PRE_PROXY]) {
|
||||||
socksproxy = strdup(data->set.str[STRING_SOCKS_PROXY]);
|
socksproxy = strdup(data->set.str[STRING_PRE_PROXY]);
|
||||||
/* if global socks proxy is set, this is it */
|
/* if global socks proxy is set, this is it */
|
||||||
if(NULL == socksproxy) {
|
if(NULL == socksproxy) {
|
||||||
failf(data, "memory shortage");
|
failf(data, "memory shortage");
|
||||||
|
@ -1468,7 +1468,7 @@ enum dupstring {
|
|||||||
STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find
|
STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find
|
||||||
$HOME/.netrc */
|
$HOME/.netrc */
|
||||||
STRING_PROXY, /* proxy to use */
|
STRING_PROXY, /* proxy to use */
|
||||||
STRING_SOCKS_PROXY, /* socks proxy to use */
|
STRING_PRE_PROXY, /* pre socks proxy to use */
|
||||||
STRING_SET_RANGE, /* range, if used */
|
STRING_SET_RANGE, /* range, if used */
|
||||||
STRING_SET_REFERER, /* custom string for the HTTP referer field */
|
STRING_SET_REFERER, /* custom string for the HTTP referer field */
|
||||||
STRING_SET_URL, /* what original URL to work on */
|
STRING_SET_URL, /* what original URL to work on */
|
||||||
|
@ -150,7 +150,7 @@ static void free_config_fields(struct OperationConfig *config)
|
|||||||
curl_slist_free_all(config->resolve);
|
curl_slist_free_all(config->resolve);
|
||||||
curl_slist_free_all(config->connect_to);
|
curl_slist_free_all(config->connect_to);
|
||||||
|
|
||||||
Curl_safefree(config->socksproxy);
|
Curl_safefree(config->preproxy);
|
||||||
Curl_safefree(config->proxy_service_name);
|
Curl_safefree(config->proxy_service_name);
|
||||||
Curl_safefree(config->service_name);
|
Curl_safefree(config->service_name);
|
||||||
|
|
||||||
|
@ -178,9 +178,7 @@ struct OperationConfig {
|
|||||||
bool ftp_ssl_control;
|
bool ftp_ssl_control;
|
||||||
bool ftp_ssl_ccc;
|
bool ftp_ssl_ccc;
|
||||||
int ftp_ssl_ccc_mode;
|
int ftp_ssl_ccc_mode;
|
||||||
|
char *preproxy;
|
||||||
char *socksproxy; /* set to server string */
|
|
||||||
|
|
||||||
int socks5_gssapi_nec; /* The NEC reference server does not protect the
|
int socks5_gssapi_nec; /* The NEC reference server does not protect the
|
||||||
encryption type exchange */
|
encryption type exchange */
|
||||||
char *proxy_service_name; /* set authentication service name for HTTP and
|
char *proxy_service_name; /* set authentication service name for HTTP and
|
||||||
|
@ -290,6 +290,7 @@ static const struct LongShort aliases[]= {
|
|||||||
{"V", "version", FALSE},
|
{"V", "version", FALSE},
|
||||||
{"w", "write-out", TRUE},
|
{"w", "write-out", TRUE},
|
||||||
{"x", "proxy", TRUE},
|
{"x", "proxy", TRUE},
|
||||||
|
{"xa", "preproxy", TRUE},
|
||||||
{"X", "request", TRUE},
|
{"X", "request", TRUE},
|
||||||
{"Y", "speed-limit", TRUE},
|
{"Y", "speed-limit", TRUE},
|
||||||
{"y", "speed-time", TRUE},
|
{"y", "speed-time", TRUE},
|
||||||
@ -1920,9 +1921,16 @@ ParameterError getparameter(char *flag, /* f or -long-flag */
|
|||||||
GetStr(&config->writeout, nextarg);
|
GetStr(&config->writeout, nextarg);
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
/* proxy */
|
switch(subletter) {
|
||||||
GetStr(&config->proxy, nextarg);
|
case 'a': /* --preproxy */
|
||||||
config->proxyver = CURLPROXY_HTTP;
|
GetStr(&config->preproxy, nextarg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* --proxy */
|
||||||
|
GetStr(&config->proxy, nextarg);
|
||||||
|
config->proxyver = CURLPROXY_HTTP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
/* set custom request */
|
/* set custom request */
|
||||||
|
@ -168,6 +168,7 @@ static const char *const helptext[] = {
|
|||||||
"Do not switch to GET after following a 302 redirect (H)",
|
"Do not switch to GET after following a 302 redirect (H)",
|
||||||
" --post303 "
|
" --post303 "
|
||||||
"Do not switch to GET after following a 303 redirect (H)",
|
"Do not switch to GET after following a 303 redirect (H)",
|
||||||
|
" --preproxy [PROTOCOL://]HOST[:PORT] Proxy before HTTP(S) proxy",
|
||||||
" -#, --progress-bar Display transfer progress as a progress bar",
|
" -#, --progress-bar Display transfer progress as a progress bar",
|
||||||
" --proto PROTOCOLS Enable/disable PROTOCOLS",
|
" --proto PROTOCOLS Enable/disable PROTOCOLS",
|
||||||
" --proto-default PROTOCOL Use PROTOCOL for any URL missing a scheme",
|
" --proto-default PROTOCOL Use PROTOCOL for any URL missing a scheme",
|
||||||
|
@ -868,8 +868,8 @@ static CURLcode operate_do(struct GlobalConfig *global,
|
|||||||
my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L);
|
my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L);
|
||||||
|
|
||||||
/* new in libcurl 7.52.0 */
|
/* new in libcurl 7.52.0 */
|
||||||
if(config->socksproxy)
|
if(config->preproxy)
|
||||||
my_setopt_str(curl, CURLOPT_SOCKS_PROXY, config->socksproxy);
|
my_setopt_str(curl, CURLOPT_PRE_PROXY, config->preproxy);
|
||||||
|
|
||||||
/* new in libcurl 7.10.6 */
|
/* new in libcurl 7.10.6 */
|
||||||
if(config->proxyanyauth)
|
if(config->proxyanyauth)
|
||||||
|
Loading…
Reference in New Issue
Block a user