How to use proxy-chain - 6 common examples

To help you get started, we’ve selected a few proxy-chain examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github apifytech / apify-js / src / puppeteer.js View on Github external
// Parse and validate proxy URL
    const parsedProxyUrl = parseUrl(opts.proxyUrl);
    if (!parsedProxyUrl.host || !parsedProxyUrl.port) {
        throw new Error('Invalid "proxyUrl" option: both hostname and port must be provided.');
    }
    if (!/^(http|https|socks4|socks5)$/.test(parsedProxyUrl.scheme)) {
        throw new Error(`Invalid "proxyUrl" option: Unsupported scheme (${parsedProxyUrl.scheme}).`);
    }

    // Anonymize proxy URL if it has username or password
    let anonymizedProxyUrl = null;
    if (parsedProxyUrl.username || parsedProxyUrl.password) {
        if (parsedProxyUrl.scheme !== 'http') {
            throw new Error('Invalid "proxyUrl" option: authentication is only supported for HTTP proxy type.');
        }
        anonymizedProxyUrl = await anonymizeProxy(opts.proxyUrl);
    }

    opts.args.push(`--proxy-server=${anonymizedProxyUrl || opts.proxyUrl}`);
    const optsForLog = _.omit(opts, LAUNCH_PUPPETEER_LOG_OMIT_OPTS);
    optsForLog.proxyUrl = redactUrl(opts.proxyUrl);
    optsForLog.args = opts.args.slice(0, opts.args.length - 1);

    log.info('Launching Puppeteer', optsForLog);
    const browser = await puppeteer.launch(opts);

    // Close anonymization proxy server when Puppeteer finishes
    if (anonymizedProxyUrl) {
        const cleanUp = () => {
            // Don't wait for finish, only log errors
            closeAnonymizedProxy(anonymizedProxyUrl, true)
                .catch(err => log.exception(err, 'closeAnonymizedProxy() failed.'));
github apifytech / apify-js / src / webdriver.js View on Github external
_initialize() {
        let promise = null;

        // Applies options.proxyUrl setting to the WebDriver's Capabilities and Chrome Options.
        // For proxy servers with authentication, this class starts a local proxy server
        // NOTE: to view effective proxy settings in Chrome, open chrome://net-internals/#proxy
        if (this.options.proxyUrl) {
            // NOTE: call anonymizeProxy() outside of promise, so that errors in proxyUrl are thrown!
            promise = anonymizeProxy(this.options.proxyUrl)
                .then((result) => {
                    this.anonymizedProxyUrl = result;

                    if (/^chrome$/i.test(this.options.browserName)) {
                        // In Chrome, Capabilities.setProxy() has no effect,
                        // so we setup the proxy manually
                        this.chromeOptions.addArguments(`--proxy-server=${this.anonymizedProxyUrl}`);
                    } else {
                        const proxyConfig = {
                            proxyType: 'MANUAL',
                            httpProxy: this.anonymizedProxyUrl,
                            sslProxy: this.anonymizedProxyUrl,
                            ftpProxy: this.anonymizedProxyUrl,
                        };
                        this.capabilities.setProxy(proxyConfig);
                    }
github apifytech / apify-js / src / puppeteer.js View on Github external
const launchPuppeteerWithProxy = async (puppeteer, opts) => {
    // Parse and validate proxy URL
    const parsedProxyUrl = parseUrl(opts.proxyUrl);
    if (!parsedProxyUrl.host || !parsedProxyUrl.port) {
        throw new Error('Invalid "proxyUrl" option: both hostname and port must be provided.');
    }
    if (!/^(http|https|socks4|socks5)$/.test(parsedProxyUrl.scheme)) {
        throw new Error(`Invalid "proxyUrl" option: Unsupported scheme (${parsedProxyUrl.scheme}).`);
    }

    // Anonymize proxy URL if it has username or password
    let anonymizedProxyUrl = null;
    if (parsedProxyUrl.username || parsedProxyUrl.password) {
        if (parsedProxyUrl.scheme !== 'http') {
            throw new Error('Invalid "proxyUrl" option: authentication is only supported for HTTP proxy type.');
        }
        anonymizedProxyUrl = await anonymizeProxy(opts.proxyUrl);
    }
github apifytech / apify-js / src / puppeteer.js View on Github external
if (!/^(http|https|socks4|socks5)$/.test(parsedProxyUrl.scheme)) {
        throw new Error(`Invalid "proxyUrl" option: Unsupported scheme (${parsedProxyUrl.scheme}).`);
    }

    // Anonymize proxy URL if it has username or password
    let anonymizedProxyUrl = null;
    if (parsedProxyUrl.username || parsedProxyUrl.password) {
        if (parsedProxyUrl.scheme !== 'http') {
            throw new Error('Invalid "proxyUrl" option: authentication is only supported for HTTP proxy type.');
        }
        anonymizedProxyUrl = await anonymizeProxy(opts.proxyUrl);
    }

    opts.args.push(`--proxy-server=${anonymizedProxyUrl || opts.proxyUrl}`);
    const optsForLog = _.omit(opts, LAUNCH_PUPPETEER_LOG_OMIT_OPTS);
    optsForLog.proxyUrl = redactUrl(opts.proxyUrl);
    optsForLog.args = opts.args.slice(0, opts.args.length - 1);

    log.info('Launching Puppeteer', optsForLog);
    const browser = await puppeteer.launch(opts);

    // Close anonymization proxy server when Puppeteer finishes
    if (anonymizedProxyUrl) {
        const cleanUp = () => {
            // Don't wait for finish, only log errors
            closeAnonymizedProxy(anonymizedProxyUrl, true)
                .catch(err => log.exception(err, 'closeAnonymizedProxy() failed.'));
        };

        browser.on('disconnected', cleanUp);

        const prevClose = browser.close.bind(browser);
github apifytech / apify-js / src / puppeteer.js View on Github external
const cleanUp = () => {
            // Don't wait for finish, only log errors
            closeAnonymizedProxy(anonymizedProxyUrl, true)
                .catch(err => log.exception(err, 'closeAnonymizedProxy() failed.'));
        };
github apifytech / apify-js / src / webdriver.js View on Github external
.then(() => {
                if (this.anonymizedProxyUrl) {
                    return closeAnonymizedProxy(this.anonymizedProxyUrl, true);
                }
            })
            .then(() => {

proxy-chain

Node.js implementation of a proxy server (think Squid) with support for SSL, authentication, upstream proxy chaining, and protocol tunneling.

Apache-2.0
Latest version published 6 months ago

Package Health Score

77 / 100
Full package analysis