node.js(二)

node.js(二)

http模块

  • http模块
    • http.get
    • http.request
    • 业务: 从nowapi中找一个免费接口,进行数据请求
const http = require( 'http' )
http.get('http://api.k780.com/?app=weather.city&cou=1&appkey=43880&sign=6a31f4fe1408d69bb0417b046eeae5b6&format=json', (res) => {
const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404 500
const contentType = res.headers['content-type']; // 获取请求类型数据类型
// json数据的content-type 'content-type': 'application/json'
let error;
if (statusCode !== 200) { // 如果状态码不是200 ,输出报错信息
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) { // 如果报错了,将报错信息存入日志
console.error(error.message);
// consume response data to free up memory
res.resume();
return;
}
res.setEncoding('utf8'); // 字符编码
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; }); // 通过data事件拼接数据流
res.on('end', () => { // 获取数据结束了
try { // 高级编程语法 捕获错误信息
console.log( rawData );
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
  • 后端服务器有两种类型
  1. web服务器 【 静态服务器 】
  2. api服务器 【 暴露接口 】
  • 请求头部报文
  1. general 请求基本信息
  2. response Headers 响应头
  3. request Headers 请求头
  4. 携带参数
  • query string paramters get请求
  • form data post 请求
  • 2.爬虫

    • 流程:去某一个网站爬取一段数据->数据清洗 ->后端服务器-> 发送前端-> 渲染数据
    • 注意:并不是所有网站都能够爬取数据
    • 以下为代码示例
const http = require( 'http' )
const host = 'localhost'
const port = 8000
http.createServer(( request,response ) => {
// response.writeHead( 状态码,请求头 )
response.writeHead( 200, {
'Content-type': 'text/html;charset=utf8'
})
const http = require( 'http' )
// 引入第三方类库
const cheerio = require( 'cheerio' )
const options = {
hostname: 'xxxxxxxxxx',
port: 80,
path: '/xxxxxxxx',
method: 'GET',
headers: {
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cache-Control':' no-cache',
Cookie: 'xxxxxxxx',
Host: 'xxxxxxxx',
Pragma: 'no-cache',
'Proxy-Connection': 'keep-alive',
Referer: 'xxxxxxxxxxxxxxx',
'Upgrade-Insecure-Requests': 1,
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': 0
}
}
http.get( options, (res) => {
const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404 500
const contentType = res.headers['content-type']; // 获取请求类型数据类型
// json数据的content-type 'content-type': 'application/json'
res.setEncoding('utf8'); // 字符编码
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; }); // 通过data事件拼接数据流
res.on('end', () => { // 获取数据结束了
try { // 高级编程语法 捕获错误信息
// console.log( rawData )
const $ = cheerio.load( rawData )
$('td.student a').each(function (index,item) {
response.write(`<h3> ${ $( this ).text() } </h3>`) // 往前端发送信息
})
response.end() // 告诉前端信息已经结束了
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
}).listen( port,host,() => {
console.log( `The server is running at: http://${ host }:${ port }` )
})





const http = require( 'http' )
// 引入第三方类库
const cheerio = require( 'cheerio' )
const options = {
hostname: 'xx.xxxx.net',
port: 80,
path: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
method: 'GET',
headers: {
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cache-Control':' no-cache',
Cookie: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
Host: 'xxxxxxxxxxxxxxx',
Pragma: 'no-cache',
'Proxy-Connection': 'keep-alive',
Referer: 'xxxxxxxxxxxxxxxxxxx',
'Upgrade-Insecure-Requests': 1,
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': 0
}
}
http.get( options, (res) => {
const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404 500
const contentType = res.headers['content-type']; // 获取请求类型数据类型
// json数据的content-type 'content-type': 'application/json'
res.setEncoding('utf8'); // 字符编码
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; }); // 通过data事件拼接数据流
res.on('end', () => { // 获取数据结束了
try { // 高级编程语法 捕获错误信息
// console.log( rawData )
const $ = cheerio.load( rawData )
$('td.student a').each(function (index,item) {
console.log( $( this ).text() + '---' + index )
})
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值