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

2016-07-12 19:43:43 +08:00
 qfdk

碰到了一个问题,公司内网,需要访问另一个地区的机房,那边的机房只有少数的端口是打开的,打开端口需要写申请,而且很麻烦,需要访问里面的内网,之前想过用 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 大家

4256 次点击
所在节点    程序员
12 条回复
Jaylee
2016-07-12 21:00:12 +08:00
const request = require('request')

request( url , ( err, response, body ) => { console.log( err, response, body ) } )
qfdk
2016-07-12 22:25:51 +08:00
@Jaylee 这个库还要 npm install 啊,有没有就是用自带的 api 的做法?而且这样只会显示在 console 里面,简单地说就是一个在线代理= =
fcicq
2016-07-12 22:28:29 +08:00
qfdk
2016-07-12 22:30:29 +08:00
@fcicq thx 我去看一下
qfdk
2016-07-12 22:48:44 +08:00
@fcicq 不行,他这个也是有 bug 的,也是只能显示一次,最后一个 crash 。
fcicq
2016-07-12 22:53:25 +08:00
@qfdk 细节问题不管. 不管你用 http 也好还是 request 库也好, pipe 肯定有一个可以用的. 大文件按你目前的做法在接收完之前就是阻塞的.
chairuosen
2016-07-12 22:55:46 +08:00
@qfdk install 跟显示在哪里没关系啊
qfdk
2016-07-12 23:01:13 +08:00
@chairuosen 我知道啊,这是两件事情,可能我表述的不清楚。
qfdk
2016-07-12 23:02:04 +08:00
@fcicq 现在正在研究使用 pipe thx
dlllcs
2016-07-13 09:49:44 +08:00
感觉可以使用 vpn 或者 shadowsocks 等进行互通
qfdk
2016-07-13 17:32:33 +08:00
@dlllcs 一开始也想过,但是服务器有限制,本地写的 bash 脚本需要进行对远程数据中心不同端口的 web 端进行访问,无奈之下,只能想到代理,没有 php ,只有 node
qfdk
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 + "......");
});
```
写了这么一段代码感觉应该没有问题了。。 但是还是报错,和我上面报错一样。
两者都是可以回显一个页面然后就退出了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX