Simplicity to create multiple HTTP Request in Parallel for NodeJS.
$ npm install parallel-http-requestvar ParallelRequest = require('parallel-http-request');
var config = {
response: "simple" // [optional] detail|simple|unirest, if empty then the response output is simple
};
var request = new ParallelRequest(config);
//or without config
var request = new ParallelRequest();The config.response options value is :
simple: minimalist output response.detail: output response very detail.unirest: output response with unirest format.
request.add('https://jsonplaceholder.typicode.com/posts/1')
.add('https://jsonplaceholder.typicode.com/posts/2')
.send(function(response){
console.log(response);
});
// or
request.add({url:'https://jsonplaceholder.typicode.com/posts/1',method:'get'})
.add({url:'https://jsonplaceholder.typicode.com/posts/2',method:'get'})
.send(function(response){
console.log(response);
});
// or mixed it
request.add({
url:'https://jsonplaceholder.typicode.com/posts/1',
method:'get'
})
.add({
url:'https://jsonplaceholder.typicode.com/posts/2',
method:'post',
headers:{'Content-Type':'application/json'},
body: {
fullname:'value',
address:'value'
}
})
.add({
url:'https://jsonplaceholder.typicode.com/posts/3',
method:'delete',
headers:{'Content-Type':'application/json'},
body: {
fullname:'value',
address:'value'
}
})
.send(function(response){
console.log(response);
});This Parallel HTTP Request is created based on unirest-nodejs library, so request.options is almost similar with unirest.
Note:
- This library is intended to create multiple request in parallel, so not all
unirestfeature is worked. Please see Limitation.
To make a multiple http request, you have to use .add() for each request.
request.add(string|object) this will add your request into collection.
request.add(string)this request will use default methodGET.request.add(object)this request will useobject options.
This will execute your multiple request.
Return output is always array object.
request.send(function(response){
console.log(response)
});url: (String)- Url to send the request.method: (String)- DefaultGET; HTTP Method.headers: (Object)- Default{}; HTTP Headers.query: (Object)- HTTP URI Parameter.body: (String | Object)- Entity body for certain requests.form: (Object)- Form Data.field: (Object)- Form fields.attach: (Object)- For handle files.followRedirect: (Boolean)- Defaulttrue; Follow HTTP3xxresponses as redirects.followAllRedirects: (Boolean)- Defaultfalse; Follow Non-GET HTTP3xxresponses as redirects.maxRedirects: (Number)- Default10; Maximum number of redirects before aborting.timeout: (Number)- Number of milliseconds to wait before aborting.encoding: (String)- Encoding to be used onsetEncodingof response data.strictSSL: (Boolean)- Defaulttrue; SetsstrictSSLflag to require that SSL certificates be valid.httpSignature: (Object)- HTTP Signature.proxy: (String)- HTTP Proxy.secureProtocol: (Object)- Sets the secure protocol to use.localAddress: (Object)- SetslocalAddress, local interface to bind for network connections.auth: (Object)- Accepts either an Object containinguser,pass, and optionallysendImmediately.aws: (Object)- Setsaws, AWS Signing Credentials.hawk: (Object)- Setshawk, HAWK Signing Credentials.cookie: (String)- Creates a cookie.
This will remove url in collection.
nameis the url of the request.
request.remove('http://google.com');This will cleanup all request in collection.
request.clean();This will return all request in collection.
request.getCollection();If you want to use unirest (the underlying layer of parallel-http-request) directly.
Because Sometimes we are not always have to call request in parallel.
Please see Unirest Documentation.
request.unirest.get('http://google.com')
.end(function(response){
console.log(response.body)
});You can just set method request by like this
request.add({url:'https://www.google.com', method:'get'});
request.add({url:'https://www.google.com', method:'post'});
request.add({url:'https://www.google.com', method:'put'});
request.add({url:'https://www.google.com', method:'patch'});
request.add({url:'https://www.google.com', method:'delete'});
request.add({url:'https://www.google.com', method:'head'});
request.add({url:'https://www.google.com', method:'options'});request.add({
url:'https://jsonplaceholder.typicode.com/posts/1',
method:'post',
query: {
search:'value'
}
});request.add({
url:'https://jsonplaceholder.typicode.com/posts/1',
method:'post',
headers:{'Content-Type':'application/json'}
body: {
fullname:'value',
address:'value'
}
});request.add({
url:'https://jsonplaceholder.typicode.com/posts/1',
method:'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
form: {
fullname:'value',
address:'value'
}
})
.add({
url:'https://jsonplaceholder.typicode.com/posts/2',
method:'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
body: JSON.stringify({
fullname:'value',
address:'value'
})
})
.add({
url:'https://jsonplaceholder.typicode.com/posts/3',
method:'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
body: 'name=nijiko&pet=turtle'
});request.add({
url:'https://jsonplaceholder.typicode.com/posts/1',
method:'post',
headers:{'Content-Type':'text/html'}
body: '<strong>Hello World!</strong>'
});request.add({
url:'http://mockbin.com/request',
method:'post',
headers:{
'Content-Type': 'multipart/form-data',
'Content-Length': fs.statSync(path.resolve('favicon.ico')).size
},
attach:{
'file':fs.createReadStream(path.resolve('favicon.ico')),
'remote file':request.unirest.request('http://google.com/favicon.ico')
}
});request.add({
url:'http://www.google.com',
timeout:60000
});request.add({
url:'http://www.google.com',
encoding:'utf-8'
});request.add({
url:'http://www.google.com',
followRedirect:true
});request.add({
url:'http://www.google.com',
maxRedirects:5
});request.add({
url:'https://www.google.com',
strictSSL:false
});request.add({
url:'http://www.google.com',
proxy:'http://localproxy.com'
});request.add({
url:'https://www.google.com',
secureProtocol:'SSLv3_client_method'
});request.add({
url:'http://www.google.com',
localAddress:'127.0.0.1'
});request.add({
url:'http://www.google.com',
auth:{
user: 'Nijiko',
pass: 'insecure',
sendImmediately: true
}
});request.add({
url:'http://www.google.com',
aws:{
key: 'AWS_S3_KEY',
secret: 'AWS_S3_SECRET',
bucket: 'BUCKET NAME'
}
});request.add({
url:'http://www.google.com',
hawk:{
credentials: {
key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
algorithm: 'sha256',
user: 'Steve'
}
}
});Create request with cookie. Please see documentation.
request.add({
url:'http://www.google.com',
cookie:'yummy_cookie=choco; tasty_cookie=strawberry'
});Creates a container to store multiple cookies, i.e. a cookie jar.
var cookieJar = request.jar;
cookieJar.add(request.cookie('yummy_cookie=choco; tasty_cookie=strawberry'));
// or as argument
cookieJar.add('key=value', '/');
request.add({
url:'http://google.com',
jar:cookieJar
});There is several feature which is not posible to do with multiple parallel request.
oauth- Sets oauth, list of oauth credentials.part- StillExperimental; Similiar to request multipart.then- promise function.pool- Single request; for socket connection which is use for single connection.forever- Keeps socket connections alive between keep-alive in requests.
The solution about this limitation is you have to directly use unirest libary.
request.unirest
.get('https://api.twitter.com/oauth/request_token')
.oauth({
callback: 'http://mysite.com/callback/',
consumer_key: 'CONSUMER_KEY',
consumer_secret: 'CONSUMER_SECRET'
})
.then(response => {
let access_token = response.body
return request.unirest
.post('https://api.twitter.com/oauth/access_token')
.oauth({
consumer_key: 'CONSUMER_KEY',
consumer_secret: 'CONSUMER_SECRET',
token: access_token.oauth_token,
verifier: token: access_token.oauth_verifier
})
})
.then((response) => {
var token = response.body
return request.unirest
.get('https://api.twitter.com/1/users/show.json')
.oauth({
consumer_key: 'CONSUMER_KEY',
consumer_secret: 'CONSUMER_SECRET',
token: token.oauth_token,
token_secret: token.oauth_token_secret
})
.query({
screen_name: token.screen_name,
user_id: token.user_id
})
})
.then((response) => {
console.log(response.body)
});Please see Unirest Documentation.
$ npm test