2016-12-17 28 views
1

我想强制我的节点js应用程序通过特定的接口或IP地址进行下载。与卷曲节点js将请求绑定到不同的接口或IP地址

wget --bind-address=192.168.21.21 http://example.com 

或类似:

在Linux中使用wget的我可以像这样做

curl --interface 192.168.21.21 --ipv4 http://example.com 

我目前使用的request包,但我看不到类似的选择,如果必须的话,可以改变。

如何将我的下载绑定到具有节点js请求的IP地址或接口?

编辑:我已经看到了评论中的问题,但他们似乎并没有解决我如何在请求中这样做的问题,并且我没有使用expressjs,因为我的应用程序没有服务器/ web存在。

+1

我相信你指的是这个SO问题http://stackoverflow.com/questions/9986220/bind-expressjs-to-a-specific-ip-address –

+1

可能的重复[如何指定一个网络接口时net请求从Node.js?](http://stackoverflow.com/questions/13602066/how-to-specify-a-network-interface-when-making-net-requests-from-node-js) – Tomalak

+1

请参阅我的编辑,我正在寻找与node.js请求最好的解决方案。如果我的问题是由巴里迪克提到的那个回答的,我不清楚如何实施它。 – user1464409

回答

0

我有相同的要求,事实证明这很容易做到。只需使用localAddress选项request(这是相同的选项作为http模块):

(async() => { 

    let request = require('request-promise-native'); // (a promisified version of request module) 

    // This prints your machine's IP 
    console.log(await request({ uri: 'https://api.ipify.org' })); 

    // This prints '***.***.***.***' 
    console.log(await request({ uri: 'https://api.ipify.org', localAddress: '***.***.***.***' })); 

})(); 

(更换***.***.***.***与新的静态IP)

注意,你当然需要事先设置建立您的静态IP并在您的操作系统中进行配置。在情况下,它可以帮助人,与Ubuntu 16.04你只添加到您的/etc/network/interfaces文件的末尾:

auto ens3:0 
iface ens3:0 inet static 
    address ***.***.***.*** 
    netmask 255.255.254.0 

(同样,你的IP取代***.***.***.***)的更多细节here