在我之前的项目中,经常用到Nodejs通过post\get方法访问其它网站、webapi。下面是我封装的

Get、Post方法,很适合在一些web字符串收发场景使用(暂不支持文件、二进制流等传输)。

****************************************************************************************************

var util = require('util');

var http = require("http");

var querystring = require('querystring');

var iconv = require('iconv-lite');

//web get

exports.WebGet = function (url, callback,encode) {

try {

http.get(url, function (req, res) {

var chunks = [];

var len = 0;

req.on('data', function (chunk) {

chunks.push(chunk);

len += chunk.length;

});

req.on('end', function () {

var data = Buffer.concat(chunks, len);

var html;

if (encode != null) {

html = iconv.decode(data, encode);

} else {

html = data.toString();

}

callback != null ? callback(html) : null;

});

});

}

catch (e) {

callback != null ? callback(e.message) : null;

}

}

//web post

exports.WebPost = function (_hostname, _port, _path,_data,callback) {

try {

var post_data = querystring.stringify(_data);

var option = {

hostname: _hostname,

port: _port,

path: _path,

method: 'POST',

headers: {

"Content-Type": 'application/x-www-form-urlencoded',

"Content-Length": post_data.length

}

};

var req = http.request(option, function (res) {

var html = "";

res.setEncoding('utf8');

res.on("data", function (chunk) {

html += chunk;

});

res.on('end', function () {

callback != null ? callback(html) : null;

});

}).on("error", function (e) {

callback != null ? callback(e.message) : null;

});

req.write(post_data + "\n");

req.end();

}

catch (e) {

callback != null ? callback(e.message) : null;

}

};

****************************************************************************************************

//WebGet使用实例:

_web.WebGet("http://www.xxx.com/a/b.htm", callBackFun, 'gb2312');

//WebPost使用实例:

var data = {

id: 1,

msg: 'abc'

};

_web.WebPost("www.xxx.com", 80, "/a/SendMsg", data, callBackFun);

****************************************************************************************************

//注1:nodejs默认支持utf-8编码,需要进行编码转换的请安装"iconv-lite"模块:npm install iconv-lite;

//注2:WebGet没有使用http.request中的method: 'GET', 而是使用 http.get。这是为了多展示一个方法,其效果是一样的;

//注3:WebPost网址参数不用加"http://",内部也没有像WebGet里一样在res.on("data")、res.on('end')里做chuank的buffer、string处理,有需要的请自行复制处理。

最新文章

  1. [Bind(Exclude = "OrderId")][ScaffoldColumn(false)]
  2. 【菜鸟玩Linux开发】Redis安装和自启动配置
  3. UnitTest
  4. IntelliJ IDEA 调试小记
  5. java集合简介
  6. 1.对于.NET的初步理解和介绍
  7. java动态加载配置文件
  8. mybatis中updateByPrimaryKeySelective
  9. Spring高级装配
  10. 实现基于Haproxy+Keepalived负载均衡高可用架构
  11. [BZOJ]2017省队十连测推广赛1
  12. git 常用操作,下拉,提交,更新,还原
  13. Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
  14. [UE4]小地图接口设计
  15. activemq在一台服务器上启动多个Broker
  16. 单用户模式&救援模式&克隆虚拟机&Linux机器相互登录
  17. Linux 系统的主机别名文件
  18. 区块链的java实现
  19. 【Twitter接口】网站嵌入推特信息
  20. Sublime Text 2/3 安装Emmet(Zencoding)以及常见使用,一种快速编写HTML/CSS代码的方法

热门文章

  1. equals和== 区别
  2. java不可见字符 trim
  3. my30_表碎片整理
  4. 原生JS实现图片拖拽移动与缩放
  5. 使用Koa.js,离不开这十个中间件
  6. Mybatis学习笔记6 - #{}和${}
  7. 使用ServletContainerInitializer动态注册组件
  8. maya2012安装失败如何卸载重装
  9. 性能测试工具Jmeter07-Jmeter性能测试实战
  10. genymotion安装及使用出现的问题