Maison > interface Web > js tutoriel > Tutoriel de base sur la façon d'utiliser le module Request dans Node.js pour gérer le protocole HTTP request_node.js

Tutoriel de base sur la façon d'utiliser le module Request dans Node.js pour gérer le protocole HTTP request_node.js

WBOY
Libérer: 2016-05-16 15:07:10
original
1738 Les gens l'ont consulté

Nous introduisons ici un module Node.js - requête. Avec ce module, les requêtes http deviennent super simples.

201633195717393.png (391×56)

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首页
}
})
Copier après la connexion

Diffusion :

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'))
Copier après la connexion

À l'inverse, vous pouvez également transmettre des fichiers à des requêtes 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 demandes peuvent également vous être adressées. 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 c'est simple :

request.post('http://service.com/upload', {form:{key:'value'}})
Copier après la connexion

ou :

request.post('http://service.com/upload').form({key:'value'})
Copier après la connexion

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'))
Copier après la connexion

Authentification HTTP :

request.get('http://some.server.com/').auth('username', 'password', false);
Copier après la connexion

ou

request.get('http://some.server.com/', {
 'auth': {
 'user': 'username',
 'pass': 'password',
 'sendImmediately': false
}
});
Copier après la connexion

sendImmediately, par défaut 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 du 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)
})
})
})
Copier après la connexion

En-tête HTTP personnalisé

User-Agent et autres peuvent être définis dans l'objet 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 avons utilisé un User-Agent personnalisé et 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);

Copier après la connexion

cookies :

Par défaut, les cookies sont désactivés. 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 = request.defaults({jar: true})
request('http://www.google.com', function () {
request('http://images.google.com')
})
Copier après la connexion

En créant une nouvelle instance de request.jar(), vous pouvez utiliser des cookies personnalisés au lieu du pot de cookies global de requête.

var j = request.jar()
var request = request.defaults({jar:j})
request('http://www.google.com', function () {
request('http://images.google.com')
})
Copier après la connexion

ou

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')
})
Copier après la connexion

Notez que setCookie nécessite au moins trois paramètres, le dernier étant 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 request = require('request'),
 fs = require('fs');
 
 request('https://www.google.com.hk/images/srpr/logo3w.png').pipe(fs.createWriteStream('doodle.png'));
Copier après la connexion

Pour plus de méthodes d'utilisation et d'instructions, veuillez cliquer ici pour continuer la lecture : https://github.com/mikeal/request/

Exemple

Voici un exemple très simple pour récupérer les données de requête d'hôtel sur Qunar.com (obtenir le classement des prix de chaque type de chambre dans l'hôtel sur une certaine période de temps) :

 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~');
 });
Copier après la connexion

Cet exemple vient d'un ami qui est dans l'hôtellerie et souhaite connaître la compétitivité des prix qu'il propose aux clients sur son site internet :

1. Si le prix proposé est trop bas, vous gagnerez moins d'argent, donc si votre prix est le plus bas, vous devez voir quel est le deuxième prix le plus bas, puis décider de l'ajuster

2. Si le prix proposé est trop élevé, les résultats du classement seront inférieurs, il n'y aura aucun client pour réserver l'hôtel et l'entreprise disparaîtra

Parce que nous faisons beaucoup de réservation d'hôtels, par exemple plus de 2 000 hôtels, si nous nous appuyons sur la vérification manuelle des classements un par un, ce sera plus passif et il sera difficile de nous développer davantage, donc je a analysé ses besoins et c'est faisable, et cela peut être transformé en un bon système d'alerte en temps réel (bien sûr les données seront automatiquement actualisées sur la page toutes les 5 à 10 minutes). Ce n'est qu'ainsi que les profits pourront être maximisés, l'efficacité du travail des services commerciaux et clients pourra être améliorée, et le nombre de coopérations hôtelières et l'expansion du personnel de l'entreprise pourront être accélérées :

1. Si vous ne perdez pas d’argent, ne faites pas de transaction déficitaire

2. Si vous trouvez que le prix proposé est trop bas ou trop élevé, vous devez prendre en charge l'appel de l'interface API de la plateforme pour modifier directement le prix ;

3. Il a pour fonction de générer automatiquement des rapports d'analyse pour analyser les changements dans les stratégies d'ajustement des prix des concurrents

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal