mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -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.
|
||||
|
||||
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>"
|
||||
(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
|
||||
|
@ -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
|
||||
CURLOPT_SOCKS_PROXY \- set SOCKS proxy to use
|
||||
CURLOPT_PRE_PROXY \- set pre-proxy to use
|
||||
.SH SYNOPSIS
|
||||
#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
|
||||
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
|
||||
numerical IP address. A numerical IPv6 address must be written within
|
||||
[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
|
||||
using port 1080 for proxies.
|
||||
|
||||
The proxy string may be prefixed with [scheme]:// to specify which kind of
|
||||
proxy is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last
|
||||
A pre proxy is a SOCKS proxy that curl connects to before it connects to the
|
||||
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
|
||||
\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
|
||||
be used. Otherwise SOCKS4 is used as default.
|
||||
|
||||
Setting the proxy string to "" (an empty string) will explicitly disable the
|
||||
use of a proxy, even if there is an environment variable set for it.
|
||||
Setting the pre proxy string to "" (an empty string) will explicitly disable
|
||||
the use of a pre proxy.
|
||||
.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
|
||||
single port number used widely for proxies. Specify it!
|
@ -212,6 +212,7 @@ man_MANS = \
|
||||
CURLOPT_POSTQUOTE.3 \
|
||||
CURLOPT_POSTREDIR.3 \
|
||||
CURLOPT_PREQUOTE.3 \
|
||||
CURLOPT_PRE_PROXY.3 \
|
||||
CURLOPT_PRIVATE.3 \
|
||||
CURLOPT_PROGRESSDATA.3 \
|
||||
CURLOPT_PROGRESSFUNCTION.3 \
|
||||
@ -269,7 +270,6 @@ man_MANS = \
|
||||
CURLOPT_SOCKOPTFUNCTION.3 \
|
||||
CURLOPT_SOCKS5_GSSAPI_NEC.3 \
|
||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \
|
||||
CURLOPT_SOCKS_PROXY.3 \
|
||||
CURLOPT_SSH_AUTH_TYPES.3 \
|
||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \
|
||||
CURLOPT_SSH_KEYDATA.3 \
|
||||
@ -522,6 +522,7 @@ HTMLPAGES = \
|
||||
CURLOPT_POSTQUOTE.html \
|
||||
CURLOPT_POSTREDIR.html \
|
||||
CURLOPT_PREQUOTE.html \
|
||||
CURLOPT_PRE_PROXY.html \
|
||||
CURLOPT_PRIVATE.html \
|
||||
CURLOPT_PROGRESSDATA.html \
|
||||
CURLOPT_PROGRESSFUNCTION.html \
|
||||
@ -579,7 +580,6 @@ HTMLPAGES = \
|
||||
CURLOPT_SOCKOPTFUNCTION.html \
|
||||
CURLOPT_SOCKS5_GSSAPI_NEC.html \
|
||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.html \
|
||||
CURLOPT_SOCKS_PROXY.html \
|
||||
CURLOPT_SSH_AUTH_TYPES.html \
|
||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html \
|
||||
CURLOPT_SSH_KEYDATA.html \
|
||||
@ -832,6 +832,7 @@ PDFPAGES = \
|
||||
CURLOPT_POSTQUOTE.pdf \
|
||||
CURLOPT_POSTREDIR.pdf \
|
||||
CURLOPT_PREQUOTE.pdf \
|
||||
CURLOPT_PRE_PROXY.pdf \
|
||||
CURLOPT_PRIVATE.pdf \
|
||||
CURLOPT_PROGRESSDATA.pdf \
|
||||
CURLOPT_PROGRESSFUNCTION.pdf \
|
||||
@ -889,7 +890,6 @@ PDFPAGES = \
|
||||
CURLOPT_SOCKOPTFUNCTION.pdf \
|
||||
CURLOPT_SOCKS5_GSSAPI_NEC.pdf \
|
||||
CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf \
|
||||
CURLOPT_SOCKS_PROXY.pdf \
|
||||
CURLOPT_SSH_AUTH_TYPES.pdf \
|
||||
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf \
|
||||
CURLOPT_SSH_KEYDATA.pdf \
|
||||
|
@ -1763,8 +1763,8 @@ typedef enum {
|
||||
CURLSSLOPT_* */
|
||||
CINIT(PROXY_SSL_OPTIONS, LONG, 261),
|
||||
|
||||
/* Name of socks proxy to use. */
|
||||
CINIT(SOCKS_PROXY, STRINGPOINT, 262),
|
||||
/* Name of pre proxy to use. */
|
||||
CINIT(PRE_PROXY, STRINGPOINT, 262),
|
||||
|
||||
/* The public key in DER form used to validate the proxy public key
|
||||
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 *));
|
||||
break;
|
||||
|
||||
case CURLOPT_SOCKS_PROXY:
|
||||
case CURLOPT_PRE_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
|
||||
* 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 *));
|
||||
break;
|
||||
|
||||
@ -4126,7 +4126,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
|
||||
conn->bits.socksproxy = (conn->bits.proxy &&
|
||||
!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.socksproxy = TRUE;
|
||||
}
|
||||
@ -6184,8 +6184,8 @@ static CURLcode create_conn(struct Curl_easy *data,
|
||||
}
|
||||
}
|
||||
|
||||
if(data->set.str[STRING_SOCKS_PROXY]) {
|
||||
socksproxy = strdup(data->set.str[STRING_SOCKS_PROXY]);
|
||||
if(data->set.str[STRING_PRE_PROXY]) {
|
||||
socksproxy = strdup(data->set.str[STRING_PRE_PROXY]);
|
||||
/* if global socks proxy is set, this is it */
|
||||
if(NULL == socksproxy) {
|
||||
failf(data, "memory shortage");
|
||||
|
@ -1468,7 +1468,7 @@ enum dupstring {
|
||||
STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find
|
||||
$HOME/.netrc */
|
||||
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_REFERER, /* custom string for the HTTP referer field */
|
||||
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->connect_to);
|
||||
|
||||
Curl_safefree(config->socksproxy);
|
||||
Curl_safefree(config->preproxy);
|
||||
Curl_safefree(config->proxy_service_name);
|
||||
Curl_safefree(config->service_name);
|
||||
|
||||
|
@ -178,9 +178,7 @@ struct OperationConfig {
|
||||
bool ftp_ssl_control;
|
||||
bool ftp_ssl_ccc;
|
||||
int ftp_ssl_ccc_mode;
|
||||
|
||||
char *socksproxy; /* set to server string */
|
||||
|
||||
char *preproxy;
|
||||
int socks5_gssapi_nec; /* The NEC reference server does not protect the
|
||||
encryption type exchange */
|
||||
char *proxy_service_name; /* set authentication service name for HTTP and
|
||||
|
@ -290,6 +290,7 @@ static const struct LongShort aliases[]= {
|
||||
{"V", "version", FALSE},
|
||||
{"w", "write-out", TRUE},
|
||||
{"x", "proxy", TRUE},
|
||||
{"xa", "preproxy", TRUE},
|
||||
{"X", "request", TRUE},
|
||||
{"Y", "speed-limit", TRUE},
|
||||
{"y", "speed-time", TRUE},
|
||||
@ -1920,10 +1921,17 @@ ParameterError getparameter(char *flag, /* f or -long-flag */
|
||||
GetStr(&config->writeout, nextarg);
|
||||
break;
|
||||
case 'x':
|
||||
/* proxy */
|
||||
switch(subletter) {
|
||||
case 'a': /* --preproxy */
|
||||
GetStr(&config->preproxy, nextarg);
|
||||
break;
|
||||
default:
|
||||
/* --proxy */
|
||||
GetStr(&config->proxy, nextarg);
|
||||
config->proxyver = CURLPROXY_HTTP;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'X':
|
||||
/* set custom request */
|
||||
GetStr(&config->customrequest, nextarg);
|
||||
|
@ -168,6 +168,7 @@ static const char *const helptext[] = {
|
||||
"Do not switch to GET after following a 302 redirect (H)",
|
||||
" --post303 "
|
||||
"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",
|
||||
" --proto PROTOCOLS Enable/disable PROTOCOLS",
|
||||
" --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);
|
||||
|
||||
/* new in libcurl 7.52.0 */
|
||||
if(config->socksproxy)
|
||||
my_setopt_str(curl, CURLOPT_SOCKS_PROXY, config->socksproxy);
|
||||
if(config->preproxy)
|
||||
my_setopt_str(curl, CURLOPT_PRE_PROXY, config->preproxy);
|
||||
|
||||
/* new in libcurl 7.10.6 */
|
||||
if(config->proxyanyauth)
|
||||
|
Loading…
Reference in New Issue
Block a user