node.js使用移动网络代理来限制HTTP请求

问题描述

作为与电话绑定以使用移动网络的一种替代方法,我在电话上运行代理服务器(通过Proxy Server应用程序),然后从本地计算机通过adb进行端口转发。使用的adb命令是:

adb -s <device> forward tcp:<localport> tcp:<proxyport>

这似乎可以直接在浏览器中很好地运行,例如加载http://whatismyip.akamai.com/显示移动网络的IP,而不是常规连接。

但是,在使用node.js restler库发出的请求中尝试使用相同的代理设置时,我没有任何运气。我正在使用的设置如下:

var restler = require('restler');
var HttpsProxyAgent = require('https-proxy-agent');

var agent = new HttpsProxyAgent('http://127.0.0.1:6400');
var restlerOptions = { timeout: 8000,agent: agent};

restler.get('http://whatismyip.akamai.com/',restlerOptions).on('complete',function(data){
    console.log(data);
});

在未设置代理的情况下,请求将输出由akamai确定的公共网络IP。但是,按照上述方式使用代理时,请求似乎挂起,并且没有任何输出到控制台:

退出代码0结束的过程

***编辑:

这些请求是作为节点Webkit应用程序的一部分发出的。也有必要通过相同的代理路由ajax请求(直接从打包的Chrome浏览器),例如:

$.ajax({
    type: 'GET',url: 'http://whatismyip.akamai.com',success: function(data,status,xhr){
        console.log(data);
    }
});

根据我到目前为止进行的搜索,我发现没有令人满意的方式将代理设置包含在这些请求中。我发现的唯一建议包括使用预过滤器更改options.url:

$.ajaxPrefilter( function( options ) {
    options = {};
    options.url = "http://127.0.0.1:6400";
});

这对请求没有影响(仍显示原始网络IP,而不显示移动网络的IP)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)