Skip to content

Instantly share code, notes, and snippets.

@alanhoff
Created September 29, 2014 20:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alanhoff/cc31ac3b3395e4bf8574 to your computer and use it in GitHub Desktop.
Save alanhoff/cc31ac3b3395e4bf8574 to your computer and use it in GitHub Desktop.
Fazendo requests com jar global e jar individual
var request = require('./request-helper');
// Fazer uma requisição utilizando a jar global, que é compartilhada
// em todo o Node.js que está rodando
request.global({
url: 'https://google.com.br'
}, function(err, res, body){
if(err)
throw err;
console.log('Google respondeu com status %s', res.statusCode);
});
// As próximas requisições feitas com o request.global usarão os cookies
// recebidos pelo Google, e assim com todas as outras requisições.
// Para limpar os cookies globais, basta usar:
request.clearGlobalCookies();
// Para fazer uma requisição usando uma jar individual, chamamos o request.single
var user = request.single();
// Agora a variável user possui uma jar somente dela, individual. Outras instâncias
// de request.single também terão jars individuais
user.request({
url: 'https://twitter.com'
}, function(err, res, body){
if(err)
throw err;
console.log('Twitter respondeu com status %s', res.statusCode);
});
// Para limpar os cookies de uma request individual basta chamar
user.clearCookies();
var request = require('request');
// Jar global onde ficarão armazenados os cookies
var defaultJar = request.jar();
/**
* Faz uma requisição com a jar global.
*
* @example
*
* ```javascript
* var request = require('./lib/request-helper.js');
* request.global({
* url: 'http://google.com.br'
* }, function(err, res, body){
* if(err)
* throw err;
*
* console.log('Google respondeu com status %s', res.statusCode);
* });
*
* // Obs, as demais requisições manterão os mesmos cookies recebidos
* // pelo Google
* ```
*
* @param {Object} options Um objeto de configuração do request.js
* @param {Function} callback O callback de retorno da requisição, que irá
* receber error, response e body.
*/
exports.global = function(options, callback){
var opts = {
jar: defaultJar
};
// Faz a extenção das opção que você passou
if(options)
Object.keys(options).forEach(function(k){
opts[k] = options[k];
});
// Realisa a request
request(opts, callback);
};
/**
* Faz uma requisição com uma jar específica que é criada no instante que
* request.sinle() é chamado.
*
* @example
*
* ```javascript
* var request = require('./lib/request-helper.js');
*
* // Criar uma instância única
* var user = request.single();
*
* // Realizar uma requisição
* user.request({
* url: 'http://google.com.br'
* }, function(err, res, body){
* if(err)
* throw err;
*
* console.log('Google respondeu com status %s', res.statusCode);
* });
*
* // Limpar os cookies desta instância
* user.clearCookies();
* ```
* @returns {Object} Um objeto contendo .request() e clearCookies()
*/
exports.single = function(){
// Instância desta requisição
var singleJar = request.jar();
return {
/**
* Realiza uma request usando uma jar de uma instância única
*
* @param {Object} options Um objeto de configuração do request.js
* @param {Function} callback O callback de retorno da requisição, que irá
* receber error, response e body.
*/
request: function(options, callback){
var opts = {
jar: singleJar
};
// Faz a extenção das opção que você passou
if(options)
Object.keys(options).forEach(function(k){
opts[k] = options[k];
});
// Realisa a request
request(opts, callback);
},
/**
* Limpa os cookies desta instância
*/
clearCookies: function(){
singleJar = request.jar();
}
};
};
/**
* Limpa os cookies globais
*/
exports.clearGlobalCookies = function(){
defaultJar = request.jar();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment