-
Notifications
You must be signed in to change notification settings - Fork 9
/
client.js
48 lines (41 loc) · 1.39 KB
/
client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var fs = require('fs');
var path = require('path');
var http2 = require('..');
var urlParse = require('url').parse;
// Setting the global logger (optional)
http2.globalAgent = new http2.Agent({
rejectUnauthorized: true,
log: require('../test/util').createLogger('client')
});
// Sending the request
var url = process.argv.pop();
var options = urlParse(url);
// Optionally verify self-signed certificates.
if (options.hostname == 'localhost') {
options.key = fs.readFileSync(path.join(__dirname, '/localhost.key'));
options.ca = fs.readFileSync(path.join(__dirname, '/localhost.crt'));
}
var request = process.env.HTTP2_PLAIN ? http2.raw.get(options) : http2.get(options);
// Receiving the response
request.on('response', function(response) {
response.pipe(process.stdout);
response.on('end', finish);
});
// Receiving push streams
request.on('push', function(pushRequest) {
var filename = path.join(__dirname, '/push-' + push_count);
push_count += 1;
console.error('Receiving pushed resource: ' + pushRequest.url + ' -> ' + filename);
pushRequest.on('response', function(pushResponse) {
pushResponse.pipe(fs.createWriteStream(filename)).on('finish', finish);
});
});
// Quitting after both the response and the associated pushed resources have arrived
var push_count = 0;
var finished = 0;
function finish() {
finished += 1;
if (finished === (1 + push_count)) {
process.exit();
}
}