关于nodejs发送带参数的post请求调用人人网api

其实对js基本都没什么了解就要去用nodejs尝试实在有些勉强,做些简单的笔记以后看起来或许有些帮助。


 用-express   -e  xxx(应用名)创建基于ejs模版的应用。
按提示cd xxx并npm install安装npm.
安装完成后将下载的javascript sdk内的renren.js放入public目录下javascripts目录内。
copy view下的index和home,ro'utes里的index和app.js。

首先,是人人的授权这点,这里用过的是人人提供的代码,需要先下载javascript的sdk。

点击打开链接

top.location = "http://apps.renren.com/yourapp/home";这里是授权后跳转到的页面,
想要获取好友列表必须调用api的friends.getFriends方法,该方法调用有三个必要参数

授权跳转后会传送很多用户信息的数据过来,我们便可以用req.parm(”acess_token")方法获取到调用api的必要的参数access_token。

因为人人api调用必须以post请求发送参数,这里我们必须自己构造出一个post请求,首先是请求里的参数,对照api里的参数说明,这里放入了
       access_token:x,
	v:'1.0',
	format:'json',
	method:'friends.getFriends',
	page:'1',
	count:'40'

参数有了,需要请求,用先添加https模版,因为调用人人api时使用https协议调用API接口可以免去sig认证。

在nodejs的api文档中找到个方法可以向服务器发送请求http://docs.cnodejs.net/cman/http.html#http.request

var req = http.request(options, function(ress) {

这里http.request()函数返回http.ClientRequest类的一个实例。ClientRequest对象是一个可写流,如果你需要用POST方法上传一个文件,可将其写入到ClientRequest对象中。ClientRequest的api说明。

options里我们写入req请求的配置信息。host+path则为人人api请求的完整路径。而人人https请求的端口443,请求必须为post。

这里请求头heder有必要写入,不然会报错,把浏览器本身请求头复制下来,并加上

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

 "Content-Length": post_data.length,这两点,这样请求就能正常处理。

在后面我们用req.write(post_data)将参数写入请求中。最后res.end表示请求结束。

而对于请求返回的好友json列表结果通过res.render传递给home页面。
var http = require('https');
var querystring = require('querystring');
var post_data = querystring.stringify({
access_token:x,v:'1.0',format:'json',method:'friends.getFriends',page:'1',count:'40'
});
var options = {
host: 'api.renren.com',
port: 443, path: '/restserver.do',
method: 'POST',headers:{"host":"localhost:3000",
"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25",
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",
"Content-Length": post_data.length,
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"accept-language":"zh-cn",
"accept-encoding":"gzip, deflate",
"connection":"keep-alive"
}};
var req = http.request(options, function(ress) {
console.log('STATUS: ' + ress.statusCode);
console.log('HEADERS: ' + JSON.stringify(ress.headers));
ress.setEncoding('utf8');
ress.on('data', function (chunk) {
 //console.log('BODY: ' + chunk);
res.render('home',{'chunk':chunk,"access_token":x});
});});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);});
// write data to request bodyreq.write(post_data + "\n");
req.end();
这里的方法其实是网上的方法改进。点击打开链接由于不了解,即便有参考也花费不少时间尝试成功。首先调用了https模版为了发送https请求,这样调用人人api可以省去sig验证。这里我调用的是friends.getFriends方法。post_data里的参数是你调用方法时需要传送的参数。调不同方法参数不同,详见点击打开链接options里是对将发送请求的一些属性的设置,host是人人服务器主机,而443是https的端口,http的端口似乎是80,path是路径,与host组成完整的请求路径。method是发送请求时的方法,人人只接受post。上述方法调用后,返回的值将在将放在chunk中。这里有一点比较重要:options里有个header参数,之前不放的时候去发送请求经常返回40x错误,后来将浏览器的请求头复制进去再加上,"Content-Type":"application/x-www-form-urlencoded;和 "Content-Length": post_data.length,"accept":这样子就能正常发送了。这样子就发送了一份https请求调用了人人api。因为对nodejs的了解实在有欠缺,所以很多东西都写不好,不过磕磕碰碰的总算是把请求发出去,也能人人返回的数据。不过调个api要自己写个post请求真的好纠结...
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值