V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qfdk
V2EX  ›  程序员

node.js 中有没有类似 php 中 file_get_contents 差不多的函数

  •  
  •   qfdk ·
    qfdk · 2016-07-12 19:43:43 +08:00 · 4190 次点击
    这是一个创建于 2870 天前的主题,其中的信息可能已经有所发展或是发生改变。

    碰到了一个问题,公司内网,需要访问另一个地区的机房,那边的机房只有少数的端口是打开的,打开端口需要写申请,而且很麻烦,需要访问里面的内网,之前想过用 ssh -L 参数来解决,但是只有一个端口。。 所以想利用类似于 php 中 file_get_contents 之类的进行回显,就算是个代理吧。

    写了几行代码

    var http = require('http');
    var url = require("url"); 
    
    http.createServer(function(req,res){
         var params = [];
            params = url.parse(req.url,true).query;
    	http.get(params['url'],function(r){
    		var body = '';
    		r.on('data',function(data){body+=data});
    		r.on('end',function(){
    			res.writeHead(200,{'content-type':'text/html'});	
    			res.end(body);
    		});
    		r.on('error',function(e){console.log("[ERROR] "+e)});
    	});
    }).listen(8081);
    

    比如我那边的内网服务器 8081 端口可以访问,我想利用 get 的功能进行内网中的访问,然后进行辉县 通过? url=内网机器 1:80 这样的访问,但是出现了一定的问题,问有没有更好的解决方法, ps 这个 nodejs 是再 kibana 下面发现的。/opt/kibana/node/bin/node , 就想利用一下。 访问了之后 可以回显一个网页 但是 服务器接着崩溃

    events.js:141
          throw er; // Unhandled 'error' event
          ^
    
    Error: connect ECONNREFUSED 127.0.0.1:80
        at Object.exports._errnoException (util.js:870:11)
        at exports._exceptionWithHostPort (util.js:893:20)
        at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1061:14)
    

    thx 大家

    12 条回复    2016-07-13 17:35:00 +08:00
    Jaylee
        1
    Jaylee  
       2016-07-12 21:00:12 +08:00
    const request = require('request')

    request( url , ( err, response, body ) => { console.log( err, response, body ) } )
    qfdk
        2
    qfdk  
    OP
       2016-07-12 22:25:51 +08:00
    @Jaylee 这个库还要 npm install 啊,有没有就是用自带的 api 的做法?而且这样只会显示在 console 里面,简单地说就是一个在线代理= =
    qfdk
        4
    qfdk  
    OP
       2016-07-12 22:30:29 +08:00
    @fcicq thx 我去看一下
    qfdk
        5
    qfdk  
    OP
       2016-07-12 22:48:44 +08:00
    @fcicq 不行,他这个也是有 bug 的,也是只能显示一次,最后一个 crash 。
    fcicq
        6
    fcicq  
       2016-07-12 22:53:25 +08:00   ❤️ 1
    @qfdk 细节问题不管. 不管你用 http 也好还是 request 库也好, pipe 肯定有一个可以用的. 大文件按你目前的做法在接收完之前就是阻塞的.
    chairuosen
        7
    chairuosen  
       2016-07-12 22:55:46 +08:00
    @qfdk install 跟显示在哪里没关系啊
    qfdk
        8
    qfdk  
    OP
       2016-07-12 23:01:13 +08:00
    @chairuosen 我知道啊,这是两件事情,可能我表述的不清楚。
    qfdk
        9
    qfdk  
    OP
       2016-07-12 23:02:04 +08:00
    @fcicq 现在正在研究使用 pipe thx
    dlllcs
        10
    dlllcs  
       2016-07-13 09:49:44 +08:00
    感觉可以使用 vpn 或者 shadowsocks 等进行互通
    qfdk
        11
    qfdk  
    OP
       2016-07-13 17:32:33 +08:00
    @dlllcs 一开始也想过,但是服务器有限制,本地写的 bash 脚本需要进行对远程数据中心不同端口的 web 端进行访问,无奈之下,只能想到代理,没有 php ,只有 node
    qfdk
        12
    qfdk  
    OP
       2016-07-13 17:35:00 +08:00
    @fcicq
    ```
    var http = require("http");
    var url = require("url");
    var server = http.createServer(function (sreq, sres) {
    var params = [];
    params = url.parse(sreq.url, true).query;
    var creq = http.get(params['url'], function (cres) {
    sres.writeHead(cres.statusCode, cres.headers);
    cres.pipe(sres);
    });
    sreq.pipe(creq);
    });
    server.listen(8081, "127.0.0.1", function () {
    console.log("listen on" + server.address().port + "......");
    });
    ```
    写了这么一段代码感觉应该没有问题了。。 但是还是报错,和我上面报错一样。
    两者都是可以回显一个页面然后就退出了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2641 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:36 · PVG 22:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.