Global HTTP/HTTPS proxy configurable using environment variables.
To configure HTTP proxy:
- Import
global-agent/bootstrap. - Export HTTP proxy address as
GLOBAL_AGENT_HTTP_PROXYenvironment variable.
Code:
import 'global-agent/bootstrap';
// or:
// import {bootstrap} from 'global-agent';
// bootstrap();Bash:
$ export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080
Alternatively, you can preload module using Node.js --require, -r configuration, e.g.
$ export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080
$ node -r 'global-agent/bootstrap' your-script.js
global-agent/bootstrap script copies process.env.GLOBAL_AGENT_HTTP_PROXY value to global.GLOBAL_AGENT.HTTP_PROXY and continues to use the latter variable.
You can override the global.GLOBAL_AGENT.HTTP_PROXY value at runtime to change proxy behaviour, e.g.
http.get('http://127.0.0.1:8000');
global.GLOBAL_AGENT.HTTP_PROXY = 'http://127.0.0.1:8001';
http.get('http://127.0.0.1:8000');
global.GLOBAL_AGENT.HTTP_PROXY = 'http://127.0.0.1:8002';First HTTP request is going to use http://127.0.0.1:8001 proxy and secord request is going to use http://127.0.0.1:8002.
All global-agent configuration is available under global.GLOBAL_AGENT namespace.
The GLOBAL_AGENT_NO_PROXY environment variable specifies URLs that should be excluded from proxying. GLOBAL_AGENT_NO_PROXY value is a comma-separated list of domain names. Asterisks can be used as wildcards, e.g.
export GLOBAL_AGENT_NO_PROXY='*.foo.com,baz.com'
says to contact all machines with the 'foo.com' TLD and 'baz.com' domains directly.
global-agent is using roarr logger to log HTTP requests and response (HTTP status code and headers), e.g.
{"context":{"program":"global-agent","namespace":"Agent","logLevel":10,"destination":"http://gajus.com","proxy":"http://127.0.0.1:8076"},"message":"proxying request","sequence":1,"time":1556269669663,"version":"1.0.0"}
{"context":{"program":"global-agent","namespace":"Agent","logLevel":10,"headers":{"content-type":"text/plain","content-length":"2","date":"Fri, 26 Apr 2019 12:07:50 GMT","connection":"close"},"requestId":6,"statusCode":200},"message":"proxying response","sequence":2,"time":1557133856955,"version":"1.0.0"}
Export ROARR_LOG=true environment variable to enable log printing to stdout.
Use roarr-cli program to pretty-print the logs.
global.GLOBAL_AGENT.eventEmitter is an instance of a Node.js event emitter.
requestevent is emitted when a new HTTP request is proxied usignglobal-agentHTTP(S) agent.
Example:
global.GLOBAL_AGENT.eventEmitter.on('request', (request) => {
request.once('response', (response) => {
console.log({
request,
response
});
});
});global-agent works with all libraries that internally use http.request.
global-agent has been tested to work with:
global-agent configures http.globalAgent and https.globalAgent to use a custom Agent for HTTP and HTTPS.
global-agent has been tested to work with Node v10 and above.
global-agentworks with Node.js v11.7.0 and above by overriding thehttp(s).globalAgent.global-agentworks with Node.js v11.6 and below by overriding thehttp(s).getandhttp(s).requestmethods.
Some libraries (e.g. request) change their behaviour when HTTP_PROXY environment variable is present. Using a namespaced environment variable prevents conflicting library behaviour.
global-tunnel (including global-tunnel-ng and tunnel) are designed to support legacy Node.js versions. They use various workarounds and rely on monkey-patching http.request, http.get, https.request and https.get methods.
In contrast, global-agent supports Node.js v10 and above, and does not implements workarounds for the older Node.js versions.