Tutorial asas tentang cara menggunakan modul Permintaan dalam Node.js untuk mengendalikan requests_node.js protokol HTTP

WBOY
Lepaskan: 2016-05-16 15:07:10
asal
1674 orang telah melayarinya

Di sini kami memperkenalkan modul Node.js - permintaan. Dengan modul ini, permintaan http menjadi sangat mudah.

201633195717393.png (391×56)

Permintaan sangat mudah untuk digunakan dan menyokong https dan ubah hala.

var request = require('request');
request('http://www.google.com', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 console.log(body) // 打印google首页
}
})
Salin selepas log masuk

Strim:

Sebarang respons boleh dikeluarkan kepada aliran fail.

request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
Salin selepas log masuk

Sebaliknya, anda juga boleh menghantar fail ke permintaan PUT atau POST. Jika tiada pengepala disediakan, sambungan fail akan dikesan dan jenis kandungan yang sepadan akan ditetapkan dalam permintaan PUT.

fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
Permintaan juga boleh disalurkan kepada diri sendiri. Dalam kes ini, jenis kandungan asal dan panjang kandungan akan dikekalkan.

request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
Borang:

permintaan menyokong aplikasi/x-www-form-urlencoded dan multipart/form-data untuk melaksanakan muat naik borang.

x-www-form-urlencoded adalah mudah:

request.post('http://service.com/upload', {form:{key:'value'}})
Salin selepas log masuk

atau:

request.post('http://service.com/upload').form({key:'value'})
Salin selepas log masuk

Gunakan data berbilang bahagian/borang dan anda tidak perlu risau tentang perkara remeh seperti menetapkan permintaan akan membantu anda menyelesaikannya.

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'))
Salin selepas log masuk

Pengesahan HTTP:

request.get('http://some.server.com/').auth('username', 'password', false);
Salin selepas log masuk

atau

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

sendImmediately, lalai kepada true, menghantar pengepala pengesahan asas. Selepas menetapkannya kepada palsu, ia akan mencuba semula apabila menerima 401 (tindak balas 401 pelayan mesti termasuk kaedah pengesahan yang ditentukan WWW-Authenticate).

Pengesahan digest disokong apabila sendImmediately adalah benar.

Log masuk OAuth:

// 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)
})
})
})
Salin selepas log masuk

Pengepala HTTP tersuai

Ejen Pengguna dan seumpamanya boleh ditetapkan dalam objek pilihan. Dalam contoh berikut, kami memanggil API github untuk mengetahui nombor koleksi dan nombor terbitan gudang tertentu. Kami menggunakan Ejen Pengguna dan https yang disesuaikan.

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);

Salin selepas log masuk

kuki:

Secara lalai, kuki dilumpuhkan. Tetapkan balang kepada benar dalam lalai atau pilihan supaya permintaan seterusnya akan menggunakan kuki.

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

Dengan mencipta contoh baharu request.jar(), anda boleh menggunakan kuki tersuai dan bukannya balang kuki global permintaan.

var j = request.jar()
var request = request.defaults({jar:j})
request('http://www.google.com', function () {
request('http://images.google.com')
})
Salin selepas log masuk

atau

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')
})
Salin selepas log masuk

Perhatikan bahawa setCookie memerlukan sekurang-kurangnya tiga parameter, yang terakhir ialah fungsi panggil balik.

Anda boleh menggunakan kaedah paip permintaan untuk mendapatkan aliran fail imej dengan mudah

 var request = require('request'),
 fs = require('fs');
 
 request('https://www.google.com.hk/images/srpr/logo3w.png').pipe(fs.createWriteStream('doodle.png'));
Salin selepas log masuk

Untuk lebih banyak kaedah dan arahan penggunaan, sila klik di sini untuk meneruskan bacaan: https://github.com/mikeal/request/

Contoh

Berikut ialah contoh yang sangat mudah untuk mendapatkan data pertanyaan hotel daripada Qunar.com (dapatkan kedudukan harga bagi setiap jenis bilik di hotel dalam tempoh masa tertentu):

 var request = require('request'),
 fs = require('fs');
 
 
 var reqUrl = 'http://hotel.qunar.com/price/detail.jsp?fromDate=2012-08-18&toDate=2012-08-19&cityurl=shanghai_city&HotelSEQ=shanghai_city_2856&cn=5';
 
 request({uri:reqUrl}, function(err, response, body) {
 
 //console.log(response.statusCode);
 //console.log(response);
 
 //如果数据量比较大,就需要对返回的数据根据日期、酒店ID进行存储,如果获取数据进行对比的时候直接读文件
 var filePath = __dirname + '/data/data.js';
 
 if (fs.exists(filePath)) {
  fs.unlinkSync(filePath);
 
  console.log('Del file ' + filePath);
 }
 
 fs.writeFile(filePath, body, 'utf8', function(err) {
  if (err) {
  throw err;
  }
 
  console.log('Save ' + filePath + ' ok~');
 });
 
 console.log('Fetch ' + reqUrl + ' ok~');
 });
Salin selepas log masuk

Contoh ini datang daripada rakan yang menjalankan perniagaan hotel dan ingin mengetahui daya saing harga yang ditawarkannya kepada pelanggan di tapak webnya:

1. Jika harga yang diberikan terlalu rendah, anda akan mendapat lebih sedikit wang, jadi jika harga anda adalah yang terendah, anda perlu melihat apakah harga kedua terendah, dan kemudian memutuskan sama ada untuk melaraskan;

2. Jika harga yang diberikan terlalu tinggi, keputusan ranking akan lebih rendah, dan tiada pelanggan untuk menempah hotel, dan perniagaan akan hilang

Disebabkan kami banyak menjalankan perniagaan tempahan hotel, contohnya lebih 2,000 hotel, kalau bergantung pada semakan manual ranking satu persatu, ia akan menjadi lebih pasif, dan sukar untuk dikembangkan lagi, jadi saya menganalisis keperluannya dan ia boleh dilaksanakan, dan Ia boleh dijadikan sistem amaran masa nyata yang baik (sudah tentu data akan dimuat semula secara automatik pada halaman setiap 5 hingga 10 minit). Hanya dengan cara ini keuntungan boleh dimaksimumkan, kecekapan kerja bahagian jualan dan pelanggan dapat dipertingkatkan, dan bilangan kerjasama hotel dan pengembangan kakitangan syarikat dapat dipercepatkan:

1. Jika anda tidak kehilangan wang, jangan buat transaksi yang merugikan

2. Jika anda mendapati harga yang diberikan terlalu rendah atau terlalu tinggi, anda perlu menyokong panggilan antara muka API platform untuk mengubah suai harga secara langsung;

3. Ia mempunyai fungsi menjana laporan analisis secara automatik untuk menganalisis perubahan dalam strategi pelarasan harga pesaing

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!