国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

Request —— 讓 Node.js http請求變得超簡單

2024-04-27 15:10:14
字體:
來源:轉載
供稿:網友

先前一直比較關注前端的東西,對后端了解較少。不過一直對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').p表單

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'})

使用multipart/form-data不用操心設置header之類的瑣事,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'))

HTTP認證

request.get('http://some.server.com/').auth('username', 'passWord', false);

request.get('http://some.server.com/', { 'auth': { 'user': 'username', 'pass': 'password', 'sendImmediately': false }});

sendImmediately,默認為真,發送一個基本的認證header。設為false之后,收到401會重試(服務器的401響應必須包含WWW-Authenticate指定認證方法)。

sendImmediately為真時支持Digest認證。

OAuth登錄

// Twitter OAuthvar 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) }) })})

定制HTTP header

User-Agent之類可以在options對象中設置。在下面的例子中,我們調用github API找出某倉庫的收藏數和派生數。我們使用了定制的User-Agent和https.

var request = require('request');var options = { url: 'https://api.github.com/repos/mikeal/request', headers: { 'User-Agent': 'request' }};function callback(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

默認情況下,cookies是禁用的。在defaults或options將jar設為true,使后續的請求都使用cookie.

var request = request.defaults({jar: true})request('http://www.google.com', function () { request('http://images.google.com')})

通過創建request.jar()的新實例,可以使用定制的cookie,而不是request全局的cookie jar。

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至少需要三個參數,最后一個是回調函數。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 边坝县| 九江县| 白城市| 亚东县| 平果县| 大兴区| 米易县| 湖州市| 泽普县| 壶关县| 蒲江县| 江津市| 新巴尔虎左旗| 天门市| 台山市| 正阳县| 平原县| 沙洋县| 嵊泗县| 梨树县| 荃湾区| 边坝县| 郯城县| 银川市| 上饶县| 台安县| 达州市| 读书| 台前县| 西贡区| 万年县| 大冶市| 龙川县| 比如县| 岐山县| 岗巴县| 连城县| 长丰县| 柏乡县| 六枝特区| 南郑县|