Nous introduisons ici un module Node.js - requête. Avec ce module, les requêtes http deviennent super simples.
Request est super simple à utiliser et prend en charge https et la redirection.
var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // 打印google首页 } })
Flux :
Toute réponse peut être sortie vers un flux de fichiers.
Flux :
Toute réponse peut être générée dans un flux de fichiers.
request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
À votre tour, vous pouvez également transmettre le fichier à une requête PUT ou POST. Si aucun en-tête n'est fourni, l'extension du fichier sera détectée et le type de contenu correspondant sera défini dans la requête PUT.
fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
Les requêtes peuvent également être redirigées vers elles-mêmes. Dans ce cas, le type de contenu et la longueur du contenu d'origine seront conservés.
request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
Formulaire :
request prend en charge application/x-www-form-urlencoded et multipart/form-data pour implémenter le téléchargement de formulaire.
x-www-form-urlencoded est simple :
request.post('http://service.com/upload', {form:{key:'value'}})
ou :
request.post('http://service.com/upload').form({key:'value'})
Utilisez multipart/form-data et vous n'aurez pas à vous soucier de questions triviales telles que la configuration des demandes d'en-têtes vous aidera à le résoudre.
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'))
Authentification HTTP :
request.get('http://some.server.com/').auth('username', 'password', false);
ou
request.get('http://some.server.com/', { 'auth': { 'user': 'username', 'pass': 'password', 'sendImmediately': false } });
sendImmédiatement, la valeur par défaut est true, envoie un en-tête d'authentification de base. Après l'avoir défini sur false, il réessayera lors de la réception d'un 401 (la réponse 401 du serveur doit inclure la méthode d'authentification spécifiée par WWW-Authenticate).
L'authentification Digest est prise en charge lorsque sendImmediately est vrai.
Connexion 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) }) }) })
En-tête HTTP personnalisé
L'agent utilisateur et autres peuvent être définis dans le objet d'options. Dans l'exemple suivant, nous appelons l'API github pour connaître le numéro de collection et le numéro dérivé d'un certain entrepôt. Nous utilisons un User-Agent personnalisé et https. Définissez jar sur true dans les valeurs par défaut ou les options afin que les requêtes ultérieures utilisent des cookies
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);
En créant une nouvelle instance de request.jar(), vous peut utiliser des cookies personnalisés au lieu de demander le pot de cookies global.
var request = request.defaults({jar: true}) request('http://www.google.com', function () { request('http://images.google.com') })
ou
var j = request.jar() var request = request.defaults({jar:j}) request('http://www.google.com', function () { request('http://images.google.com') })
Notez que setCookie nécessite au moins trois Paramètres, le dernier est la fonction de rappel.
Vous pouvez utiliser la méthode du tube de requête pour obtenir facilement le flux de fichiers de l'image
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') })
Pour plus de méthodes d'utilisation et d'instructions, cliquez ici Continuer la lecture : https://github.com/mikeal/request/
Exemple
var request = require('request'), fs = require('fs'); request('https://www.google.com.hk/images/srpr/logo3w.png').pipe(fs.createWriteStream('doodle.png'));
Cet exemple vient d'un ami qui est dans l'hôtellerie, vous souhaitez connaître la compétitivité des prix que vous proposez aux clients sur votre site Internet :
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~'); });
3. Il existe une fonction pour générer automatiquement des rapports d'analyse pour analyser les stratégies d'ajustement des prix des concurrents
Pour plus d'articles connexes sur le didacticiel d'utilisation de base du module Request dans Node.js pour gérer les requêtes du protocole HTTP ; , veuillez faire attention au site Web PHP chinois !