node 请求使用动态 hosts
开发中使用 hosts 司空见惯,但如果一个需求,用户表单输入 hosts 后台使用这个 hosts 去请求,如何用正确的姿势去请求呢?
如果每次都修改 hosts 文件,那,,也许,,不太科学,如果是个临时 hosts 呢?hosts 文件会越来越臃肿,不推荐。
在百度,谷歌无果后 (也许关键词不对,反正没找到),自己尝试了下,却发现异常简单。
hosts demo
假设我们要添加如下临时 hosts:
1
192.168.1.10 dev.domain.com
node 代码如下:
1
2
3
4
5
6
7
8
9
10
const http = require('http');
const options = {
host: '192.168.1.10',
path: 'http://dev.domain.com/info.html',
};
http.get(options, (res) => {
res.pipe(process.stdout);
});
保存为 test.js
后执行:
1
$ node test.js
即可在控制台看到执行结果。
这里为了偷懒,直接将结果 pipe 到控制台了。
使用 got 模块
当然,为了 hosts 而重新手写封装请求,简直不能忍,所以推荐 got 模块,这是一个非常优雅的 node request 模块。
1
2
3
4
5
6
7
8
9
10
11
const got = require('got');
const options = {
host: '192.168.1.10',
path: 'http://dev.domain.com/info.html',
};
(async () => {
const { body } = await got(options);
console.log(body);
})();
结合 async/await
简直爽的不要不要的。
小结
原理嘛,其实就是服务器是根据请求头(headers)里的 host 是字段来匹配具体访问哪一个web服务。
所以只要指定请求的服务器 IP
+ headers.host
即可访问指定 IP 下指定的 web 服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
const http = require('http');
const options = {
host: '192.168.1.10',
path: '/info.html',
headers: {
host: 'dev.domain.com'
}
};
http.get(options, (res) => {
res.pipe(process.stdout);
});
如果是这个例子,也许就好理解了。
真心不理解也无所谓,反正简单,能用,就好了。
文章来源:
Author:楼教主
link:http://www.52cik.com/2017/12/15/node-request-hosts.html