nodejs封装的webget webpost方法
在我之前的项目中,经常用到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处理,有需要的请自行复制处理。
nodejs封装的webget webpost方法的更多相关文章
- 使用nodejs防止csurf攻击的方法
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...
- Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法
前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...
- Unity属性的封装、继承、方法隐藏
(一)Unity属性封装.继承.方法隐藏的学习和总结 一.属性的封装 1.属性封装的定义:通过对属性的读和写来保护类中的域. 2.格式例子: private string departname; // ...
- 自己封装的一个js方法用于获取显示的星期和日期时间
自己封装的一个js方法用于获取显示的星期和日期时间 /** * 获取用于显示的星期和日期时间 * @param date * @returns {string} */ function getWeek ...
- 原生ajax与封装的ajax使用方法
当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...
- 封装常用的selenium方法
package com.yk.userlive.base; import java.net.MalformedURLException;import java.net.URL;import java. ...
- nodejs取参四种方法req.body,req.params,req.param,req.body
摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...
- javascript的函数、创建对象、封装、属性和方法、继承
转自原文javascript的函数.创建对象.封装.属性和方法.继承 一,function 从一开始接触到js就感觉好灵活,每个人的写法都不一样,比如一个function就有N种写法 如:functi ...
- 67.nodejs取参四种方法req.body,req.params,req.param,req.body
转自:http://www.cnblogs.com/jkingdom/p/8065202.html 摘要: nodejs取参四种方法req.body,req.params,req.param,req. ...
随机推荐
- ubuntu简单的小命令
1. gnome-system-monitor,用作調处系统管理窗口,方便结束相关程序. 2. sudo python setup.py install,用作对.py文件的安装,但注意要先cd /ho ...
- my21_myloader -o参数
-o 参数 如果不使用-o参数,遇到第一个有主键或者唯一约束的数据,则退出当前线程:如果有-o参数,则删除原来的表,创建新表,再插入数据,主键不会发生变化. ** Message: Dropping ...
- Forbidden You don't have permission to access XXX on this server
Forbidden You don't have permission to access / on this server. 找到 apache 配置文件 httpd.conf 把里面的 <D ...
- java——极简handler机制
handler机制要做的事情: 1.把一堆从四面八方传来的message加到一个队列中,这个队列就是MessageQueue. 2.将MessageQueue中的队头Message取出,并使用这个me ...
- C# 利用ADO.NET导出大批量数据
2015年12月,XX项目中需要做一个数据导出功能,当时所有页面的到处功能均已经实现,但有个页面数据量太大,导出过程中导出页面直接卡死.不得已我准备选用ADO.NET来重新完成这个功能,因为考虑到越偏 ...
- oracle批量删除表
select 'DROP TABLE '||TABLE_NAME||';' from user_tables where table_name like ‘%T_%’
- python dataframe drop_duplicates用法技巧去重
data.drop_duplicates()#data中一行元素全部相同时才去除 data.drop_duplicates(['a','b'])#data根据’a','b'组合列删除重复项,默认保留第 ...
- 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法
不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...
- AndroidStudio3.0的安装和配置笔记
开发Android项目要搭建开发环境.可以选择使用Eclipse安装ADT插件来开发安卓项目,也可以使用谷歌的官方IDE——AndroidStudio3.0. AndroidStudio3.0安装的具 ...
- CentOS 开机自启动脚本
开机时执行自己的脚本. 1.编写自己的服务脚本 进入系统服务脚本目录: cd /etc/rc.d/init.d/ vi test 内容如下: #!/bin/bash # # chkconfig: - ...