检测 至少 发送 res stars fun ideal ice
先前一直比较关注前端的东西,对后端了解较少。不过一直对 Node.js 比较感兴趣,去年 12 月还去参加了阿里的 CNODE 交流聚会。
以后希望通过这里的博客分享一些学习 Node.js 的笔记。一方面总结了自己的学习心得,另一方面也可以和大家一起分享交流。
嗯,大概就是这样子。
这篇就先介绍一个 Node.js 的模块——request。有了这个模块,http 请求变的超简单。
Request 使用超简单,同时支持 https 和重定向。
- var request =require('request');
- request('http://www.google.com',function(error, response, body) {if (!error && response.statusCode ==200) {console.log(body)// 打印google首页
- }
- })
任何响应都可以输出到文件流。
- request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
反过来,也可以将文件传给 PUT 或 POST 请求。未提供 header 的情况下,会检测文件后缀名,在 PUT 请求中设置相应的
。
- content-type
- fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
请求也可以
给自己。这种情况下会保留原
- pipe
和
- content-type
。
- content-length
- request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
支持
- request
和
- application/x-www-form-urlencoded
实现表单上传。
- multipart/form-data
很简单:
- x-www-form-urlencoded
- request.post('http://service.com/upload', {form:{key:'value'}})
或者:
- request.post('http://service.com/upload').form({key:'value'})
使用
不用操心设置 header 之类的琐事,
- multipart/form-data
会帮你解决。
- request
- var r = request.post('http://service.com/upload')var form = r.form()
- form.append('my_field','my_value')
- form.append('my_buffer',new Buffer([1,2,3]))
- form.append('my_file', fs.createReadStream(path.join(__dirname,'doodle.png'))
- form.append('remote_file', request('http://google.com/doodle.png'))
- request.get('http://some.server.com/').auth('username','password',false);
或
- request.get('http://some.server.com/', {'auth': {'user':'username','pass':'password','sendImmediately':false
- }
- });
,默认为真,发送一个基本的认证 header。设为
- sendImmediately
之后,收到
- false
会重试(服务器的 401 响应必须包含
- 401
指定认证方法)。
- WWW-Authenticate
sendImmediately 为真时支持 Digest 认证。
- // Twitter OAuth
- var qs = require('querystring'),
- oauth = {
- callback: 'http: //mysite.com/callback/'
- ,
- consumer_key: CONSUMER_KEY,
- consumer_secret: CONSUMER_SECRET
- },
- url = 'https: //api.twitter.com/oauth/request_token'
- ;
- request.post({
- url: url,
- oauth: oauth
- },
- function(e, r, body) {
- // Ideally, you would take the body in the response
- // and construct a URL that a user clicks on (like a sign in button).
- // The verifier is only available in the response after a user has
- // verified with twitter that they are authorizing your app.
- var access_token = qs.parse(body),
- oauth = {
- consumer_key: CONSUMER_KEY,
- consumer_secret: CONSUMER_SECRET,
- token: access_token.oauth_token,
- verifier: access_token.oauth_verifier
- },
- url = 'https: //api.twitter.com/oauth/access_token'
- ;
- request.post({
- url: url,
- oauth: oauth
- },
- function(e, r, body) {
- var perm_token = qs.parse(body),
- oauth = {
- consumer_key: CONSUMER_KEY,
- consumer_secret: CONSUMER_SECRET,
- token: perm_token.oauth_token,
- token_secret: perm_token.oauth_token_secret
- },
- url = 'https: //api.twitter.com/1/users/show.json?'
- ,
- params = {
- screen_name: perm_token.screen_name,
- user_id: perm_token.user_id
- };
- url += qs.stringify(params) request.get({
- url: url,
- oauth: oauth,
- json: true
- },
- function(e, r, user) {
- console.log(user)
- })
- })
- })
之类可以在
- User-Agent
对象中设置。在下面的例子中,我们调用 github API 找出某仓库的收藏数和派生数。我们使用了定制的
- options
和 https.
- User-Agent
- var request =require('request');var options = {
- url:'https://api.github.com/repos/mikeal/request',
- headers: {'User-Agent':'request'
- }
- };functioncallback(error, response, body) {if (!error && response.statusCode ==200) {var info =JSON.parse(body);console.log(info.stargazers_count +" Stars");console.log(info.forks_count +" Forks");
- }
- }
- request(options, callback);
默认情况下,cookies 是禁用的。在
或
- defaults
将
- options
设为
- jar
,使后续的请求都使用 cookie.
- true
- var request = request.defaults({jar:true})
- request('http://www.google.com',function() {
- request('http://images.google.com')
- })
通过创建
的新实例,可以使用定制的 cookie,而不是
- request.jar()
全局的 cookie jar。
- request
- var j = request.jar()var request = request.defaults({jar:j})
- request('http://www.google.com',function() {
- request('http://images.google.com')
- })
或者
- var j = request.jar()var cookie = request.cookie('your_cookie_here')
- j.setCookie(cookie, uri,function(err, cookie){})
- request({url:'http://www.google.com', jar: j},function() {
- request('http://images.google.com')
- })
注意,
至少需要三个参数,最后一个是回调函数。
- setCookie
request 的 GitHub 主页
Request —— 让 Node.js http 请求变得超简单
来源: http://www.bubuko.com/infodetail-2016871.html