快速上手 - http 模块

  • 作者:KK

  • 发表日期:2019.09.05


基本示例

本文演示如何简单地使用http模块来发起请求,其实跟前面的 它是怎么工作在服务端的 一样是用 http 模块。

let http = require('http');

let options = {
  hostname: 'www.kkh86.com', //域名
  port: 80, //端口
  path: '/it/index.html', //URI 路径
};

//创建请求
let request = http.get(options, (res) => {
    let body = ''; //响应内容
    res.on('data', (chunk) => {
        //接收响应内容的回调,因为当响应内容数据量太大的时候,要分片段接收,所以每接收一个片段都会触发一次这个回调,因此下面有 += 的拼接
        body += chunk
    });

    res.on('end', () => {
        //所有内容接收完毕之后
        console.log(body);
    });
});

request.end(); //发出请求

再来看一个 POST 请求:

let http = require('http'),
    queryString = require('querystring');

let postData = {
    param1: 'aaa',
    param2: 'bbb',
};

let options = {
    hostname: 'www.kkh86.com',
    port: 80,
    path: '/login.do',
    method: 'POST',
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3730.400 QQBrowser/10.5.3805.400',
        'X-Requested-With': 'XMLHttpRequest',
    }
};

let request = http.request(options, (res) => {
    let body = '';
    res.on('data', (chunk) => {
        body += chunk
    });

    res.on('end', () => {
        console.log(body);
    });
});
request.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});
request.write(queryString.stringify(postData));
request.end();

说明

你会发现上面代码过程挺啰嗦的,其实它就是把自己定位在一个底层的角色,并不是让我们平时写代码的过程中就这么用的,我们要发 http 请求的话,推荐用axios这些第三方模块。


发送 https 请求

require('http')换成require('https')之后就可以了,基本使用是一样的。


使用代理

在选项里进行以下调整即可:

let options = {
    hostname: '127.0.0.1', //代理服务器的地址
    port: 8888, //代理服务器的端口
    path: 'http://www.kkh86.com/it/index.html', //希望代理帮忙请求的地址
};

具体的代码示例:

let http = require('http');

let options = {
    hostname: '127.0.0.1',
    port: 8888,
    // path: 'http://www.kkh86.com/it/index.html', //http地址当然可以
    path: 'https://www.baidu.com/', //https地址也可以
};

let request = http.get(options, (res) => {
    let body = '';
    res.on('data', (chunk) => {
        body += chunk
    });

    res.on('end', () => {
        console.log(body);
    });
});

request.end();