123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- var request = require('../index')
- , http = require('http')
- , assert = require('assert')
- , zlib = require('zlib')
- if (!zlib.Gunzip.prototype.setEncoding) {
- try {
- require('stringstream')
- } catch (e) {
- console.error('stringstream must be installed to run this test.')
- console.error('skipping this test. please install stringstream and run again if you need to test this feature.')
- process.exit(0)
- }
- }
- var testContent = 'Compressible response content.\n'
- , testContentGzip
- var server = http.createServer(function (req, res) {
- res.statusCode = 200
- res.setHeader('Content-Type', 'text/plain')
- if (/\bgzip\b/i.test(req.headers['accept-encoding'])) {
- zlib.gzip(testContent, function (err, data) {
- assert.ifError(err)
- testContentGzip = data
- res.setHeader('Content-Encoding', 'gzip')
- res.end(data)
- })
- } else {
- res.end(testContent)
- }
- })
- server.listen(6767, function (err) {
- assert.ifError(err)
- var headers, options
- // Transparently supports gzip decoding to callbacks
- options = { url: 'http://localhost:6767/foo', gzip: true }
- request.get(options, function (err, res, body) {
- assert.ifError(err)
- assert.strictEqual(res.headers['content-encoding'], 'gzip')
- assert.strictEqual(body, testContent)
- })
- // Transparently supports gzip decoding to pipes
- options = { url: 'http://localhost:6767/foo', gzip: true }
- var chunks = []
- request.get(options)
- .on('data', function (chunk) { chunks.push(chunk) })
- .on('end', function () {
- assert.strictEqual(Buffer.concat(chunks).toString(), testContent)
- })
- .on('error', function (err) { assert.ifError(err) })
- // Does not request gzip if user specifies Accepted-Encodings
- headers = { 'Accept-Encoding': null }
- options = {
- url: 'http://localhost:6767/foo',
- headers: headers,
- gzip: true
- }
- request.get(options, function (err, res, body) {
- assert.ifError(err)
- assert.strictEqual(res.headers['content-encoding'], undefined)
- assert.strictEqual(body, testContent)
- })
- // Does not decode user-requested encoding by default
- headers = { 'Accept-Encoding': 'gzip' }
- options = { url: 'http://localhost:6767/foo', headers: headers }
- request.get(options, function (err, res, body) {
- assert.ifError(err)
- assert.strictEqual(res.headers['content-encoding'], 'gzip')
- assert.strictEqual(body, testContentGzip.toString())
- })
- // Supports character encoding with gzip encoding
- headers = { 'Accept-Encoding': 'gzip' }
- options = {
- url: 'http://localhost:6767/foo',
- headers: headers,
- gzip: true,
- encoding: "utf8"
- }
- var strings = []
- request.get(options)
- .on('data', function (string) {
- assert.strictEqual(typeof string, "string")
- strings.push(string)
- })
- .on('end', function () {
- assert.strictEqual(strings.join(""), testContent)
- // Shutdown server after last test
- server.close()
- })
- .on('error', function (err) { assert.ifError(err) })
- })
|