Proxy environment variables - everything curl (original) (raw)
curl checks for the existence of specially named environment variables before it runs to see if a proxy is requested to get used.
You specify the proxy by setting a variable named [scheme]_proxy
to hold the proxy hostname (the same way you would specify the host with -x
). If you want to tell curl to use a proxy when access an HTTP server, you set thehttp_proxy
environment variable. Like this:
http_proxy=http://proxy.example.com:80
curl -v www.example.com
While the above example shows HTTP, you can, of course, also set ftp_proxy
,https_proxy
, and so on. All these proxy environment variable names excepthttp_proxy
can also be specified in uppercase, like HTTPS_PROXY
.
To set a single variable that controls all protocols, the ALL_PROXY
exists. If a specific protocol variable one exists, such a one takes precedence.
No proxy
You sometimes end up in a situation where one or a few hostnames should be excluded from going through the proxy that normally would be used. This is then done with the NO_PROXY
variable. Set that to a comma- separated list of hostnames that should not use a proxy when being accessed. You can setNO_PROXY
to be a single asterisk ('*') to match all hosts.
If a name in the exclusion list starts with a dot (.
), then the name matches that entire domain. For example .example.com
matches both www.example.com
and home.example.com
but not nonexample.com
.
As an alternative to the NO_PROXY
variable, there is also a --noproxy
command line option that serves the same purpose and works the same way.
Since curl 7.86.0, a user can exclude an IP network using the CIDR notation: append a slash and number of bits to an IP address to specify the bit size of the network to match. For example, match the entire 16 bit network starting with 192.168
by providing the pattern 192.168.0.0/16
.
http_proxy in lower case only
The HTTP version of the proxy environment variables is treated differently than the others. It is only accepted in its lower case version because of the CGI protocol, which lets users run scripts in a server when invoked by an HTTP server. When a CGI script is invoked by a server, it automatically creates environment variables for the script based on the incoming headers in the request. Those environment variables are prefixed with uppercase HTTP_
.
An incoming request to an HTTP server using a request header like Proxy: yada
therefore creates the environment variable HTTP_PROXY
set to containyada
before the CGI script is started. If such a CGI script runs curl, it is important that curl does not treat that as a proxy to use.
Accepting the upper case version of this environment variable has been the source for many security problems in lots of software through times.