Comparing version
@@ -6,2 +6,3 @@ /** | ||
var http = require('http'); | ||
var https = require('https'); | ||
var urlutil = require('url'); | ||
@@ -49,3 +50,3 @@ var qs = require('querystring'); | ||
*/ | ||
exports.request = function(url, args, callback, context) { | ||
exports.request = function (url, args, callback, context) { | ||
if (typeof args === 'function') { | ||
@@ -63,3 +64,3 @@ context = callback; | ||
var port = info.port || 80; | ||
if (info.protocol == 'https:') { | ||
if (info.protocol === 'https:') { | ||
request_method = https.request; | ||
@@ -80,3 +81,3 @@ if (!info.port) { | ||
if (!args.content) { | ||
if(body && !(body instanceof String || body instanceof Buffer)) { | ||
if (body && !(body instanceof String || body instanceof Buffer)) { | ||
body = qs.stringify(body); | ||
@@ -93,9 +94,9 @@ } | ||
var timer = null; | ||
var req = request_method(options, function(res) { | ||
var req = request_method(options, function (res) { | ||
var chunks = [], size = 0; | ||
res.on('data', function(chunk) { | ||
res.on('data', function (chunk) { | ||
size += chunk.length; | ||
chunks.push(chunk); | ||
}); | ||
res.on('end', function() { | ||
res.on('end', function () { | ||
if (timer) { | ||
@@ -106,12 +107,16 @@ clearTimeout(timer); | ||
var data = null; | ||
switch(chunks.length) { | ||
case 0: data = new Buffer(0); break; | ||
case 1: data = chunks[0]; break; | ||
default: | ||
data = new Buffer(size); | ||
for (var i = 0, pos = 0, l = chunks.length; i < l; i++) { | ||
chunks[i].copy(data, pos); | ||
pos += chunks[i].length; | ||
} | ||
break; | ||
switch (chunks.length) { | ||
case 0: | ||
data = new Buffer(0); | ||
break; | ||
case 1: | ||
data = chunks[0]; | ||
break; | ||
default: | ||
data = new Buffer(size); | ||
for (var i = 0, pos = 0, l = chunks.length; i < l; i++) { | ||
chunks[i].copy(data, pos); | ||
pos += chunks[i].length; | ||
} | ||
break; | ||
} | ||
@@ -122,3 +127,3 @@ callback.call(context, null, data, res); | ||
var timeout = args.timeout; | ||
timer = setTimeout(function() { | ||
timer = setTimeout(function () { | ||
timer = null; | ||
@@ -128,7 +133,3 @@ req.__isTimeout = true; | ||
}, timeout); | ||
// req.setTimeout(timeout, function() { | ||
// req.__isTimeout = true; | ||
// req.abort(); | ||
// }); | ||
req.on('error', function(err) { | ||
req.on('error', function (err) { | ||
if (timer) { | ||
@@ -162,25 +163,21 @@ clearTimeout(timer); | ||
*/ | ||
exports.getCharset = function getCharset(req, data) { | ||
exports.getCharset = function getCharset(res, data) { | ||
var CHARTSET_RE = /charset=([\w\-]+)/ig; | ||
var charset = null; | ||
var content_type = req.headers['content-type']; | ||
if(!content_type) { | ||
// test before 1024 bytes | ||
var end = data.length; | ||
if(end > 512) { | ||
end = 512; | ||
} | ||
content_type = data.slice(0, end).toString(); | ||
var matchs = null; | ||
var end = data.length > 512 ? 512 : data.length; | ||
// console.log(data.toString()) | ||
var content_type = res.headers['content-type']; | ||
if (content_type) { | ||
// guest from header first | ||
matchs = CHARTSET_RE.exec(content_type); | ||
} | ||
var matchs = CHARTSET_RE.exec(content_type); | ||
if(matchs) { | ||
charset = matchs[1].toLowerCase(); | ||
} else if(req.headers['content-type']) { | ||
if (!matchs) { | ||
// guest from html header | ||
content_type = data.slice(0, end).toString(); | ||
matchs = CHARTSET_RE.exec(content_type); | ||
if(matchs) { | ||
charset = matchs[1].toLowerCase(); | ||
} | ||
} | ||
return charset; | ||
if (matchs) { | ||
return matchs[1].toLowerCase(); | ||
} | ||
return null; | ||
}; |
{ | ||
"name": "urllib", | ||
"version": "0.2.4", | ||
"version": "0.2.5", | ||
"description": "Help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more. Like python's _urllib_ module.", | ||
"keywords": ["urllib", "http", "urlopen"], | ||
"keywords": [ "urllib", "http", "urlopen", "curl", "wget" ], | ||
"author": "fengmk2 <fengmk2@gmail.com> (http://github.com/fengmk2)", | ||
"homepage": "http://github.com/TBEDP/urllib", | ||
"main": "./lib/urllib.js", | ||
"main": "index.js", | ||
"repository": { | ||
@@ -20,9 +20,6 @@ "type": "git", | ||
"should": ">=0.4.2", | ||
"mocha": ">=0.14.1", | ||
"jscoverage" : "~0.1.0" | ||
"mocha": ">=0.14.1" | ||
}, | ||
"engines": { | ||
"node": ">=v0.6.10" | ||
}, | ||
"engines": { "node": ">= 0.6.10" }, | ||
"license": "MIT" | ||
} |
@@ -20,3 +20,3 @@ # urllib | ||
urllib.request('http://cnodejs.org/', { wd: 'nodejs' }, function(err, data, res) { | ||
urllib.request('http://cnodejs.org/', { wd: 'nodejs' }, function (err, data, res) { | ||
console.log(res.statusCode); | ||
@@ -30,2 +30,3 @@ console.log(res.headers); | ||
* Upload file. | ||
* Auto redirect handle. | ||
@@ -32,0 +33,0 @@ * Bash auth support. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
14218
24.61%2
-33.33%11
22.22%382
21.66%46
2.22%5
66.67%