node.js第11课(HTTPclient)
一、http模块提供了两个函数http.request和http.get,功能是作为client向HTTPserver发起请求。
Ext.Ajax.request({},function(response))
1.http.request(options,callback)发起HTTP请求,接受两个參数,option是一个类似关联数组的对象,
表示请求的參数,callback是请求的回调函数,option经常使用的參数例如以下
host:请求站点的域名或IP地址
port:请求站点的端口,默认是80,
method:请求方法,模式是GET/POST
path:请求的相对于根的路径,默认是"/"。QueryString应该包括在当中,比如/search?query=marico
headers:一个关联数组对象,为请求头的内容
callback传递一个參数,为http.ClientResponse的实例
http.request返回一个http.ClientRequest的实例
//clientRequest.js
var http=require('http');
var querystring=require('querystring');
//启动服务
http.createServer(function(req,res){
console.log('请求到来,解析參数');
var post='';
req.on('data',function(chunk){
post+=chunk;
});
req.on('end',function(){
post=querystring.parse(post);
//解析完毕
console.log('參数解析完毕,返回name參数');
res.end(post.name);
});
}).listen(3000,'127.0.0.1');
//client请求
var contents=querystring.stringify({
nane:'octopus',
age:20,
address:'beijing'
});
var options={
host:'localhost',
path:'/',
port:3000,
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length':contents.length
}
};
var req=http.request(options,function(res){
res.setEncoding('utf-8');
res.on('data',function(data){
console.log('后台返回数据');
console.log(data);
})
});
req.write(contents);
req.end();
2.http.get(options,callback) http模块还提供了一个更加简便的方法用于处理GET请求:http.get。它是http.request的简化版,
唯一的差别在于http.get自己主动将请求方法设为GET请求,同一时候不须要手动调用req.end();
实例:clientGet.js
var http=require('http');
var url=require('url');
var util=require('util');
//启动服务
http.createServer(function(req,res){
console.log('请求到来,解析參数');
var params=url.parse(req.url,true);
console.log('解析完毕');
console.log(util.inspect(params));
console.log('向client返回');
res.end(params.query.name);
}).listen(3000);
http.get({
'host':'localhost',
path:'/user?name=octopus&age=20',
port:3000},
function(res){
res.setEncoding('utf-8');
res.on('data',function(data){
console.log('服务端响应回来的数据为:'+data);
})
});
二、http.ClientRequest
该对象是由http.request或http.get返回产生的对象,表示一个已经产生并且正在进行的HTTP请求,它提供了response事件,
即http。request或http.get第二个參数制定的回调函数的绑定对象,请求必须调用end方法结束请求。
提供的函数:
request.abort() 终止正在发送的请求
request.setTimeout(timeout,[callback]) 设置请求超时时间,timeout为毫秒数,当请求超时后,callback将会被调用
其他:request.setNoDelay([noDelay])、request.setScoketKeepAlive([enable],[initialDelay])等函数。
API地址:http://nodejs.org/api/http.html
三、http.ClientResponse
http.ClientReponse是与http.ServerResponse相似,提供三个事件,data、end和close,分别在数据到达,传输结束和连接结束时触发,
当中data事件传递一个參数chunk,表示接受到的数据
属性,表示请求的结果状态
statusCode HTTP状态码,如200,404,500
httpVersion:HTTP协议版本号
headers:HTTP请求头
trailers:HTTP请求尾
函数:
response.setEncoding([encoding]):设置默认的编码,当data事件被触发时,数据将以encoding编码。默认值为null,以buffer的形式存储。
response.pause():暂停接受数据和发送事件,方便实现下载功能。
response.resume():以暂停的状态中恢复
node.js第11课(HTTPclient)的更多相关文章
- CentOS 下安装 Node.js 8.11.3 LTS Version
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google Chrome V8 JavaScript引擎,简单说是运行在服务端的 JavaScript.下面我们来演示一下Cen ...
- node.js第十课(HTTPserver)
概念:Node.js提供了http模块.当中封装了一个高效的HTTPserver和一个简单的HTTPclient. http.server是一个基于事件的HTTP服务器.内部用C++实现 ...
- Node.js学习(11)----HTTP服务器与客户端
Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基于事件的 HTTP 服务器,它的核心由 Node.js ...
- Node.js 2017.11.5-2017.11.16期间制作的图片爬虫总结
2017年11月18日12:33:06
- node.js初识11
1.EJS Embedded JavaScript templates 模板引擎 .EJS的效率不高,因为他后台是通过字符串来处理的 <ul> <% for(var i = 0 ; ...
- Node.js实战11:fs模块初探。
fs模块封装了对文件操作的各种方法,比如同步和异步读写.批量操作.流.监听. 我们还是通常例程学习, 获取目录下的文件清单: var fs =require("fs"); fs.r ...
- 《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- Node.js 爬虫,自动化抓取文章标题和正文
持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ...
- 【译】 Node.js v0.12的新特性 -- Cluster模式采用Round-Robin负载均衡
原文:https://strongloop.com/strongblog/whats-new-in-node-js-v0-12-cluster-round-robin-load-balancing 本 ...
随机推荐
- 洛谷P1725 琪露诺
传送门啦 本人第一个单调队列优化 $ dp $,不鼓励鼓励? 琪露诺这个题,$ dp $ 还是挺好想的对不,但是暴力 $ dp $ 的话会 $ TLE $ ,所以我们考虑用单调队列优化. 原题中说她只 ...
- SQL Server 2000中查询表名,列名及字段类型
经常碰到一些忘记表名称的情况,此时只记得个大概,此时可通过查询系统表Sysobjects找到所要的表名,如要查找包含用户的表名,可通过以下SQL语句实现, Select * From sysobjec ...
- SQL语句添加删除修改字段[sql server 2000/2005]
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- mac上Homebrew安装以及python安装
Homebrew homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能. Homebrew常用命令 查看brew的帮助:brew –help 安装 ...
- 转发:RocketMQ与kafka的对比
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...
- easyUI小技巧-纯干货
一.显示分页(pagination:true)情况下,隐藏每页显示的记录条数的那个select(即pageList),下图箭头 方法1:onBeforeLoad:function(param){ ...
- WebApi 插件式构建方案:集成加载数据库连接字符串
body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...
- 【LOJ】#2537. 「PKUWC2018」Minimax
题解 加法没写取模然后gg了QwQ,de了半天 思想还是比较自然的,线段树合并的维护方法我是真的很少写,然后没想到 很显然,我们有个很愉快的想法是,对于每个节点枚举它所有的叶子节点,对于一个叶子节点的 ...
- 【LOJ】#2587. 「APIO2018」铁人两项
题解 学习了圆方树!(其实是复习了Tarjan求点双) 我又双叒叕忘记了tarjan点双一个最重要,最重要的事情! 就是--假如low[v] >= dfn[u],我们就找到了一个点双,开始建立方 ...
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) E - Aquarium decoration 贪心 + 平衡树
E - Aquarium decoration 枚举两个人都喜欢的个数,就能得到单个喜欢的个数,然后用平衡树维护前k大的和. #include<bits/stdc++.h> #define ...