Maison >interface Web >js tutoriel >Introduction à l'utilisation du module Request dans Node.js pour gérer les requêtes du protocole HTTP

Introduction à l'utilisation du module Request dans Node.js pour gérer les requêtes du protocole HTTP

不言
不言original
2018-06-30 14:44:171603parcourir

Cet article présente principalement le tutoriel d'utilisation de base du module Request dans Node.js pour traiter les requêtes HTTP prend également en charge les requêtes de signature OAuth, ce qui est très bon et puissant. Les amis qui en ont besoin peuvent s'y référer

<.>Ici Présentation d'un module Node.js - demande. 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(&#39;request&#39;);
request(&#39;http://www.google.com&#39;, function (error, response, body) {
 if (!error && response.statusCode == 200) {
 console.log(body) // 打印google首页
}
})

Flux :

Toute réponse peut être générée dans un flux de fichiers.

request(&#39;http://google.com/doodle.png&#39;).pipe(fs.createWriteStream(&#39;doodle.png&#39;))

À l'inverse, vous pouvez également passer 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(&#39;http://service.com/upload&#39;, {form:{key:&#39;value&#39;}})

ou :

request.post(&#39;http://service.com/upload&#39;).form({key:&#39;value&#39;})

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(&#39;http://service.com/upload&#39;)
var form = r.form()
form.append(&#39;my_field&#39;, &#39;my_value&#39;)
form.append(&#39;my_buffer&#39;, new Buffer([1, 2, 3]))
form.append(&#39;my_file&#39;, fs.createReadStream(path.join(__dirname, &#39;doodle.png&#39;))
form.append(&#39;remote_file&#39;, request(&#39;http://google.com/doodle.png&#39;))

Authentification HTTP :

request.get(&#39;http://some.server.com/&#39;).auth(&#39;username&#39;, &#39;password&#39;, false);

ou

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

envoyerImmédiatement, la valeur par défaut est vraie, envoyant 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(&#39;querystring&#39;)
 , oauth =
 { callback: &#39;http://mysite.com/callback/&#39;
 , consumer_key: CONSUMER_KEY
 , consumer_secret: CONSUMER_SECRET
}
 , url = &#39;https://api.twitter.com/oauth/request_token&#39;
;
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 = &#39;https://api.twitter.com/oauth/access_token&#39;
;
 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 = &#39;https://api.twitter.com/1/users/show.json?&#39;
 , 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é

User-Agent et le like Peut être défini 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(&#39;request&#39;);

var options = {
 url: &#39;https://api.github.com/repos/mikeal/request&#39;,
 headers: {
 &#39;User-Agent&#39;: &#39;request&#39;
}
};

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 :

Par défaut, les cookies sont désactivé. Définissez jar sur true dans les valeurs par défaut ou les options pour activer les demandes ultérieures d'utilisation de cookies

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

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 j = request.jar()
var request = request.defaults({jar:j})
request(&#39;http://www.google.com&#39;, function () {
request(&#39;http://images.google.com&#39;)
})

ou

var j = request.jar()
var cookie = request.cookie(&#39;your_cookie_here&#39;)
j.setCookie(cookie, uri, function (err, cookie){})
request({url: &#39;http://www.google.com&#39;, jar: j}, function () {
request(&#39;http://images.google.com&#39;)
})

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 request = require(&#39;request&#39;),
 fs = require(&#39;fs&#39;);
 
 request(&#39;https://www.google.com.hk/images/srpr/logo3w.png&#39;).pipe(fs.createWriteStream(&#39;doodle.png&#39;));

Pour plus de méthodes d'utilisation et d'instructions, cliquez ici Continuer la lecture : https://github.com/mikeal/request/

Exemple

Un exemple très simple est écrit ici pour explorer la requête Qunar.com Hotel données (obtenir le classement des prix de chaque type de chambre dans l'hôtel sur une certaine période de temps) :

 var request = require(&#39;request&#39;),
 fs = require(&#39;fs&#39;);
 
 
 var reqUrl = &#39;http://hotel.qunar.com/price/detail.jsp?fromDate=2012-08-18&toDate=2012-08-19&cityurl=shanghai_city&HotelSEQ=shanghai_city_2856&cn=5&#39;;
 
 request({uri:reqUrl}, function(err, response, body) {
 
 //console.log(response.statusCode);
 //console.log(response);
 
 //如果数据量比较大,就需要对返回的数据根据日期、酒店ID进行存储,如果获取数据进行对比的时候直接读文件
 var filePath = __dirname + &#39;/data/data.js&#39;;
 
 if (fs.exists(filePath)) {
  fs.unlinkSync(filePath);
 
  console.log(&#39;Del file &#39; + filePath);
 }
 
 fs.writeFile(filePath, body, &#39;utf8&#39;, function(err) {
  if (err) {
  throw err;
  }
 
  console.log(&#39;Save &#39; + filePath + &#39; ok~&#39;);
 });
 
 console.log(&#39;Fetch &#39; + reqUrl + &#39; ok~&#39;);
 });
Cet exemple vient d'un ami qui travaille dans l'hôtellerie et souhaite pour savoir ce qu'il fait sur le site Compétitivité du prix proposé aux clients :

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

2. Si le prix fourni est trop élevé, les résultats du classement de la recherche seront relativement bas et il n'y aura pas de clients ; pour réserver l'hôtel, et les affaires disparaîtront

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 recherche manuelle des classements un par un, ce sera passif, et il sera difficile de l'étendre, j'ai donc analysé ses besoins et c'est faisable et peut être réalisé. Un très bon système d'alerte en temps réel (bien sûr les données seront automatiquement rafraîchies 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 être améliorée, et le nombre de coopérations hôtelières et l'expansion du personnel de l'entreprise seront accélérés :

1. Ne perdez pas d'argent et ne le faites pas. effectuer des transactions déficitaires ;

2. Si vous trouvez que le prix fourni 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 existe une fonction pour générer automatiquement des rapports d'analyse pour analyser les stratégies d'ajustement des prix des concurrents

Ce qui précède est l'intégralité du contenu de cet article. à l'étude de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Introduction aux définitions de module dans nodejs


Apprentissage du module cluster dans Node


Comment nodejs implémente le chargement asynchrone bigpipe des pages


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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