What is proxy-from-env?
The proxy-from-env npm package is a utility for determining the proxy server to use for HTTP or HTTPS requests, based on environment variables. It interprets standard proxy environment variables like HTTP_PROXY, HTTPS_PROXY, and NO_PROXY, and provides a simple API to retrieve the correct proxy based on a given URL.
What are proxy-from-env's main functionalities?
Get proxy for URL
This feature allows you to determine the appropriate proxy for a given URL by considering the environment variables. The function `getProxyForUrl` returns the URL of the proxy server that should be used for the provided URL.
const getProxyForUrl = require('proxy-from-env').getProxyForUrl;
const url = 'http://example.com';
const proxy = getProxyForUrl(url);
console.log(proxy);
Other packages similar to proxy-from-env
global-agent
The global-agent package provides a global HTTP/HTTPS proxy agent that can be used to route HTTP/HTTPS requests through a specified proxy server. It is similar to proxy-from-env in that it respects standard proxy environment variables, but it also provides a bootstrap function to enable proxying globally in an application.
proxy-agent
Proxy-agent is a module that maps proxy configuration to various proxy agent implementations. It supports HTTP, HTTPS, SOCKS, and PAC file proxy configurations. Unlike proxy-from-env, which only determines the proxy URL, proxy-agent actually returns an agent that can be used directly with the HTTP/HTTPS request modules.
https-proxy-agent
The https-proxy-agent package provides an HTTP(s) proxy `Agent` implementation for HTTPS requests. It is designed to work with the built-in `https` module. This package is more focused on providing an agent for HTTPS proxying, whereas proxy-from-env is more about determining the proxy URL from the environment.
proxy-from-env
proxy-from-env
is a Node.js package that exports a function (getProxyForUrl
)
that takes an input URL (a string or
url.parse
's
return value) and returns the desired proxy URL (also a string) based on
standard proxy environment variables. If no proxy is set, an empty string is
returned.
It is your responsibility to actually proxy the request using the given URL.
Installation:
npm install proxy-from-env
Example
This example shows how the data for a URL can be fetched via the
http
module, in a proxy-aware way.
var http = require('http');
var parseUrl = require('url').parse;
var getProxyForUrl = require('proxy-from-env').getProxyForUrl;
var some_url = 'http://example.com/something';
var proxy_url = getProxyForUrl(some_url);
if (proxy_url) {
var parsed_some_url = parseUrl(some_url);
var parsed_proxy_url = parseUrl(proxy_url);
httpOptions = {
protocol: parsed_proxy_url.protocol,
hostname: parsed_proxy_url.hostname,
port: parsed_proxy_url.port,
path: parsed_some_url.href,
headers: {
Host: parsed_some_url.host,
},
};
} else {
httpOptions = some_url;
}
http.get(httpOptions, function(res) {
var responses = [];
res.on('data', function(chunk) { responses.push(chunk); });
res.on('end', function() { console.log(responses.join('')); });
});
Environment variables
The environment variables can be specified in lowercase or uppercase, with the
lowercase name having precedence over the uppercase variant. A variable that is
not set has the same meaning as a variable that is set but has no value.
NO_PROXY
NO_PROXY
is a list of host names (optionally with a port). If the input URL
matches any of the entries in NO_PROXY
, then the input URL should be fetched
by a direct request (i.e. without a proxy).
Matching follows the following rules:
NO_PROXY=*
disables all proxies.- Space and commas may be used to separate the entries in the
NO_PROXY
list. - If
NO_PROXY
does not contain any entries, then proxies are never disabled. - If a port is added after the host name, then the ports must match. If the URL
does not have an explicit port name, the protocol's default port is used.
- Generally, the proxy is only disabled if the host name is an exact match for
an entry in the
NO_PROXY
list. The only exceptions are entries that start
with a dot or with a wildcard; then the proxy is disabled if the host name
ends with the entry.
See test.js
for examples of what should match and what does not.
*_PROXY
The environment variable used for the proxy depends on the protocol of the URL.
For example, https://example.com
uses the "https" protocol, and therefore the
proxy to be used is HTTPS_PROXY
(NOT HTTP_PROXY
, which is only used for
http:-URLs).
The library is not limited to http(s), other schemes such as
FTP_PROXY
(ftp:),
WSS_PROXY
(wss:),
WS_PROXY
(ws:)
are also supported.
If present, ALL_PROXY
is used as fallback if there is no other match.
External resources
The exact way of parsing the environment variables is not codified in any
standard. This library is designed to be compatible with formats as expected by
existing software.
The following resources were used to determine the desired behavior: