Google-api-nodejs-client: Sent requests via HTTP proxy

Created on 27 Jul 2013  路  9Comments  路  Source: googleapis/google-api-nodejs-client

It would be nice to be able to use the google-api-nodejs-client via a HTTP proxy. Request appears to support proxy configuration.

Possibly via the withOpts:

discover('youtube', 'v3').withOpts({ proxy: 'http://mylocalproxy.com' });
triage me

Most helpful comment

As checking request doc,

add this line before google.options({ proxy: 'http://127.0.0.1:7777' }); helps:

process.env.HTTPS_PROXY = 'http://127.0.0.1:7777';

https://github.com/mikeal/request#controlling-proxy-behaviour-using-environment-variables

All 9 comments

Fixed in 1.0.0. You can now specify additional options to the request object at the global or service level.

var google = require('googleapis');
var youtube = google.youtube({ version: 'v3', proxy: /* proxy here */ });
// .. use youtube object here

To see more information look at README#Options and more information on setting a proxy can be found here. (Our library just relays the settings to the mikeal/request object)

Seems it does not work for the auth API. I may be wrong but I think the proxy is not set in the calls to this.transporter.request in oauth2client.js.

Hi @Juljan, there's a test you can find here that will show you how to apply things like proxy to a request.

I have written an additional test here to test the scenario of setting a proxy with auth set to an oauth client. The test passed with no additional changes to the code, so you can be sure that it is working.

What about HTTPS proxys ? Is there any plan to support it in the future ? Should it be reported to the "request" project issues ?

I have tried set a global proxy with

google.options({ proxy: 'http://127.0.0.1:7777' });

But as I checked my local http proxy debug log, google api nodejs client does not always go through this proxy. Sometime it does, sometime it trys to access directly (and it would not success in my scenario).

Can anyone help me test on it?

As checking request doc,

add this line before google.options({ proxy: 'http://127.0.0.1:7777' }); helps:

process.env.HTTPS_PROXY = 'http://127.0.0.1:7777';

https://github.com/mikeal/request#controlling-proxy-behaviour-using-environment-variables

Yep, process.env.HTTPS_PROXY = 'http://:'; worked for me. Thanks @aguegu

I tried google.options({ proxy: 'http://SOMETHING_WRONG' }). It works regularly! So it shouldn't be the correct setting.

I found the below option works as expected:

const HttpsProxyAgent = require('https-proxy-agent')
const {google} = require('googleapis')
google.options({
    agent: new HttpsProxyAgent('http://127.0.0.1:8580')
})

This crashes on invalid proxies and works on valid proxies, as expected.


Ref:
https://github.com/googleapis/google-api-nodejs-client#request-options says:

For more fine-tuned control over how your API calls are made, we provide you with the ability to specify additional options that can be applied directly to the 'gaxios' object used in this library to make network calls to the API.

And gaxios introduces itself:

An HTTP request client that provides an axios like interface over top of node-fetch

And node-fetch uses http-agent:

https://github.com/node-fetch/node-fetch#custom-agent

Was this page helpful?
0 / 5 - 0 ratings