urllib
Help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more. Like python's _urllib_ module.
Last updated 12 years ago by fengmk2 .
MIT · Repository · Original npm · Tarball · package.json
$ npm install urllib 
SYNC missed versions from official npm registry.

urllib

NPM version Node.js CI Test coverage Known Vulnerabilities npm download

Request HTTP URLs in a complex world — basic and digest authentication, redirections, timeout and more.

Install

npm install urllib

Usage

TypeScript and ESM

import { request } from 'urllib';

const { data, res } = await request('http://cnodejs.org/');
// result: { data: Buffer, res: Response }
console.log('status: %s, body size: %d, headers: %j', res.status, data.length, res.headers);

CommonJS

const { request } = require('urllib');

const { data, res } = await request('http://cnodejs.org/');
// result: { data: Buffer, res: Response }
console.log('status: %s, body size: %d, headers: %j', res.status, data.length, res.headers);

API Doc

Method: async request(url[, options])

Arguments

  • url String | Object - The URL to request, either a String or a Object that return by url.parse.
  • options Object - Optional
    • method String - Request method, defaults to GET. Could be GET, POST, DELETE or PUT. Alias 'type'.
    • data Object - Data to be sent. Will be stringify automatically.
    • content String | Buffer - Manually set the content of payload. If set, data will be ignored.
    • stream stream.Readable - Stream to be pipe to the remote. If set, data and content will be ignored.
    • writeStream stream.Writable - A writable stream to be piped by the response stream. Responding data will be write to this stream and callback will be called with data set null after finished writing.
    • files {Array<ReadStream|Buffer|String> | Object | ReadStream | Buffer | String - The files will send with multipart/form-data format, base on formstream. If method not set, will use POST method by default.
    • contentType String - Type of request data. Could be json (Notes: not use application/json here). If it's json, will auto set Content-Type: application/json header.
    • dataType String - Type of response data. Could be text or json. If it's text, the callbacked data would be a String. If it's json, the data of callback would be a parsed JSON Object and will auto set Accept: application/json header. Default callbacked data would be a Buffer.
    • fixJSONCtlChars Boolean - Fix the control characters (U+0000 through U+001F) before JSON parse response. Default is false.
    • headers Object - Request headers.
    • timeout Number | Array - Request timeout in milliseconds for connecting phase and response receiving phase. Default is 5000. You can use timeout: 5000 to tell urllib use same timeout on two phase or set them seperately such as timeout: [3000, 5000], which will set connecting timeout to 3s and response 5s.
    • keepAliveTimeout number | null - Default is 4000, 4 seconds - The timeout after which a socket without active requests will time out. Monitors time between activity on a connected socket. This value may be overridden by keep-alive hints from the server. See MDN: HTTP - Headers - Keep-Alive directives for more details.
    • auth String - username:password used in HTTP Basic Authorization.
    • digestAuth String - username:password used in HTTP Digest Authorization.
    • followRedirect Boolean - follow HTTP 3xx responses as redirects. defaults to true.
    • maxRedirects Number - The maximum number of redirects to follow, defaults to 10.
    • formatRedirectUrl Function - Format the redirect url by your self. Default is url.resolve(from, to).
    • beforeRequest Function - Before request hook, you can change every thing here.
    • streaming Boolean - let you get the res object when request connected, default false. alias customResponse
    • compressed Boolean - Accept gzip, br response content and auto decode it, default is true.
    • timing Boolean - Enable timing or not, default is true.
    • socketPath String | null - request a unix socket service, default is null.
    • highWaterMark Number - default is 67108864, 64 KiB.

Options: options.data

When making a request:

await request('https://example.com', {
  method: 'GET',
  data: {
    'a': 'hello',
    'b': 'world',
  },
});

For GET request, data will be stringify to query string, e.g. http://example.com/?a=hello&b=world.

For others like POST, PATCH or PUT request, in defaults, the data will be stringify into application/x-www-form-urlencoded format if content-type header is not set.

If content-type is application/json, the data will be JSON.stringify to JSON data format.

Options: options.content

options.content is useful when you wish to construct the request body by yourself, for example making a content-type: application/json request.

Notes that if you want to send a JSON body, you should stringify it yourself:

await request('https://example.com', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  content: JSON.stringify({
    a: 'hello',
    b: 'world',
  }),
});

It would make a HTTP request like:

POST / HTTP/1.1
host: example.com
content-type: application/json

{
  "a": "hello",
  "b": "world"
}

This exmaple can use options.data with application/json content type:

await request('https://example.com', {
  method: 'POST',
  headers: {
    'content-type': 'application/json'
  },
  data: {
    a: 'hello',
    b: 'world',
  }
});

Options: options.files

Upload a file with a hello field.

await request('https://example.com/upload', {
  method: 'POST',
  files: __filename,
  data: {
    hello: 'hello urllib',
  },
});

Upload multi files with a hello field.

await request('https://example.com/upload', {
  method: 'POST',
  files: [
    __filename,
    fs.createReadStream(__filename),
    Buffer.from('mock file content'),
  ],
  data: {
    hello: 'hello urllib with multi files',
  },
});

Custom file field name with uploadfile.

await request('https://example.com/upload', {
  method: 'POST',
  files: {
    uploadfile: __filename,
  },
});

Response Object

Response is normal object, it contains:

  • status or statusCode: response status code.
    • -1 meaning some network error like ENOTFOUND
    • -2 meaning ConnectionTimeoutError
  • headers: response http headers, default is {}
  • size: response size
  • aborted: response was aborted or not
  • rt: total request and response time in ms.
  • timing: timing object if timing enable.
  • socket: socket info

Run test with debug log

NODE_DEBUG=urllib:* npm test

Mocking Request

export from undici

import { strict as assert } from 'assert';
import { MockAgent, setGlobalDispatcher, request } from 'urllib';

const mockAgent = new MockAgent();
setGlobalDispatcher(mockAgent);

const mockPool = mockAgent.get('http://localhost:7001');

mockPool.intercept({
  path: '/foo',
  method: 'POST',
}).reply(400, {
  message: 'mock 400 bad request',
});

const response = await request('http://localhost:7001/foo', {
  method: 'POST',
  dataType: 'json',
});
assert.equal(response.status, 400);
assert.deepEqual(response.data, { message: 'mock 400 bad request' });

Request through a http proxy

export from undici

import { ProxyAgent, request } from 'urllib';

const proxyAgent = new ProxyAgent('http://my.proxy.com:8080');
const response = await request('https://www.npmjs.com/package/urllib', {
  dispatcher: proxyAgent,
});
console.log(response.status, response.headers);

Benchmarks

Fork undici benchmarks script

Connections 1

Tests Samples Result Tolerance Difference with slowest
http - no keepalive 15 6.38 req/sec ± 2.44 % -
http - keepalive 10 6.77 req/sec ± 2.35 % + 6.13 %
urllib2 - request 45 40.13 req/sec ± 2.88 % + 528.66 %
urllib3 - request 10 58.51 req/sec ± 2.52 % + 816.64 %
undici - pipeline 5 59.12 req/sec ± 2.47 % + 826.18 %
undici - fetch 15 60.42 req/sec ± 3.00 % + 846.60 %
undici - dispatch 5 60.58 req/sec ± 1.39 % + 848.99 %
undici - stream 5 61.30 req/sec ± 1.31 % + 860.39 %
undici - request 5 61.74 req/sec ± 2.03 % + 867.20 %

Connections 50

Tests Samples Result Tolerance Difference with slowest
urllib2 - request 51 1465.40 req/sec ± 14.40 % -
undici - fetch 40 3121.10 req/sec ± 2.82 % + 112.99 %
http - no keepalive 45 3355.42 req/sec ± 2.84 % + 128.98 %
http - keepalive 51 5179.55 req/sec ± 36.61 % + 253.46 %
urllib3 - request 30 7045.86 req/sec ± 2.93 % + 380.82 %
undici - pipeline 50 8306.92 req/sec ± 2.99 % + 466.87 %
undici - request 51 9552.59 req/sec ± 13.13 % + 551.88 %
undici - stream 45 12523.45 req/sec ± 2.97 % + 754.61 %
undici - dispatch 51 12970.18 req/sec ± 3.15 % + 785.10 %

Contributors


fengmk2


dead-horse


semantic-release-bot


xingrz


popomore


JacksonTian


ibigbug


greenkeeperio-bot


atian25


killagu


paambaati


tremby


denghongcai


gemwuu


XadillaX


alsotang


leoner


hyj1991


isayme


cyjake


whxaxes


chadxz


adapt0


danielwpz


danielsss


Jeff-Tian


nick-ng


rishavsharan


willizm


davidkhala


aleafs


Amunu


azure-pipelines[bot]


capsice


changzhiwin


yuzhigang33


elrrrrrrr


fishbar


gxcsoccer


mars-coder


rockdai


dickeylth


aladdin-add

This project follows the git-contributor spec, auto updated at Mon Dec 04 2023 00:13:39 GMT+0800.

License

MIT

Current Tags

  • 4.6.0                                ...           beta (21 days ago)
  • 4.6.11                                ...           latest (5 days ago)
  • 2.44.0                                ...           latest-2 (6 months ago)
  • 3.27.1                                ...           latest-3 (3 months ago)

239 Versions

  • 4.6.11                                ...           5 days ago
  • 4.6.10                                ...           6 days ago
  • 4.6.9                                ...           8 days ago
  • 4.6.8                                ...           14 days ago
  • 4.6.7                                ...           14 days ago
  • 4.6.6                                ...           18 days ago
  • 4.6.5                                ...           18 days ago
  • 4.6.4                                ...           19 days ago
  • 4.6.3                                ...           20 days ago
  • 4.6.2                                ...           21 days ago
  • 4.6.1                                ...           21 days ago
  • 4.6.0                                ...           21 days ago
  • 4.5.1                                ...           23 days ago
  • 4.5.0                                ...           25 days ago
  • 4.5.0-beta.3                                ...           a month ago
  • 4.5.0-beta.2                                ...           a month ago
  • 4.5.0-beta.1                                ...           a month ago
  • 4.4.0                                ...           3 months ago
  • 4.3.1                                ...           3 months ago
  • 3.27.1                                ...           3 months ago
  • 4.3.0                                ...           3 months ago
  • 4.2.2                                ...           3 months ago
  • 4.2.1                                ...           3 months ago
  • 2.44.0                                ...           6 months ago
  • 3.27.0                                ...           6 months ago
  • 4.2.0                                ...           6 months ago
  • 4.1.0                                ...           6 months ago
  • 3.26.0                                ...           6 months ago
  • 4.0.0                                ...           6 months ago
  • 2.43.0                                ...           6 months ago
  • 2.42.0                                ...           6 months ago
  • 3.25.1                                ...           7 months ago
  • 3.25.0                                ...           8 months ago
  • 3.24.0                                ...           8 months ago
  • 3.23.0                                ...           10 months ago
  • 3.22.5                                ...           10 months ago
  • 3.22.4                                ...           10 months ago
  • 3.22.3                                ...           10 months ago
  • 3.22.2                                ...           a year ago
  • 3.22.1                                ...           a year ago
  • 3.22.0                                ...           a year ago
  • 3.21.0                                ...           a year ago
  • 3.20.0                                ...           a year ago
  • 3.19.3                                ...           a year ago
  • 3.19.2                                ...           a year ago
  • 3.19.1                                ...           a year ago
  • 3.19.0                                ...           a year ago
  • 3.18.1-beta.0                                ...           a year ago
  • 3.18.1                                ...           a year ago
  • 3.18.0                                ...           a year ago
  • 3.17.2                                ...           a year ago
  • 2.41.0                                ...           a year ago
  • 3.17.1                                ...           2 years ago
  • 3.17.0                                ...           2 years ago
  • 3.16.1                                ...           2 years ago
  • 3.16.0                                ...           2 years ago
  • 3.15.0                                ...           2 years ago
  • 3.14.1                                ...           2 years ago
  • 3.14.0                                ...           2 years ago
  • 3.13.2                                ...           2 years ago
  • 3.13.1                                ...           2 years ago
  • 3.13.0                                ...           2 years ago
  • 3.12.0                                ...           2 years ago
  • 3.11.0                                ...           2 years ago
  • 3.10.2                                ...           2 years ago
  • 3.10.1                                ...           2 years ago
  • 3.10.0                                ...           2 years ago
  • 3.9.0                                ...           2 years ago
  • 3.8.1                                ...           2 years ago
  • 3.8.0                                ...           2 years ago
  • 3.7.0                                ...           2 years ago
  • 3.6.0                                ...           2 years ago
  • 3.5.2                                ...           2 years ago
  • 3.5.1                                ...           2 years ago
  • 3.5.0                                ...           2 years ago
  • 3.4.0                                ...           2 years ago
  • 2.40.0                                ...           2 years ago
  • 3.3.1                                ...           2 years ago
  • 2.39.1                                ...           2 years ago
  • 2.39.0                                ...           2 years ago
  • 3.3.0                                ...           2 years ago
  • 3.2.3                                ...           2 years ago
  • 3.2.2                                ...           2 years ago
  • 3.2.1                                ...           2 years ago
  • 3.2.0                                ...           2 years ago
  • 3.1.3                                ...           2 years ago
  • 3.1.2                                ...           2 years ago
  • 3.1.1                                ...           2 years ago
  • 3.1.0                                ...           2 years ago
  • 3.0.4                                ...           2 years ago
  • 3.0.3                                ...           2 years ago
  • 3.0.2                                ...           2 years ago
  • 3.0.1                                ...           2 years ago
  • 3.0.0                                ...           2 years ago
  • 2.38.1                                ...           2 years ago
  • 3.0.0-alpha.1                                ...           2 years ago
  • 3.0.0-alpha.0                                ...           3 years ago
  • 2.38.0                                ...           3 years ago
  • 2.37.4                                ...           3 years ago
  • 2.37.3                                ...           3 years ago
  • 2.37.2                                ...           4 years ago
  • 2.37.1                                ...           4 years ago
  • 2.37.0                                ...           4 years ago
  • 2.36.1                                ...           5 years ago
  • 2.36.0                                ...           5 years ago
  • 2.35.0                                ...           5 years ago
  • 2.34.2                                ...           5 years ago
  • 2.34.1                                ...           5 years ago
  • 2.34.0                                ...           6 years ago
  • 2.33.4                                ...           6 years ago
  • 2.33.3                                ...           6 years ago
  • 2.33.2                                ...           6 years ago
  • 2.33.1                                ...           6 years ago
  • 2.33.0                                ...           6 years ago
  • 2.32.0                                ...           6 years ago
  • 2.31.3                                ...           6 years ago
  • 2.31.2                                ...           6 years ago
  • 2.31.1                                ...           6 years ago
  • 2.31.0                                ...           6 years ago
  • 2.30.0                                ...           6 years ago
  • 2.29.1                                ...           6 years ago
  • 2.29.0                                ...           6 years ago
  • 2.28.1                                ...           7 years ago
  • 2.28.0                                ...           7 years ago
  • 2.27.0                                ...           7 years ago
  • 2.26.0                                ...           7 years ago
  • 2.25.4                                ...           7 years ago
  • 2.25.3                                ...           7 years ago
  • 2.25.2                                ...           7 years ago
  • 2.25.1                                ...           7 years ago
  • 2.25.0                                ...           7 years ago
  • 2.24.0                                ...           7 years ago
  • 2.23.0                                ...           7 years ago
  • 2.22.0                                ...           8 years ago
  • 2.21.2                                ...           8 years ago
  • 2.21.1                                ...           8 years ago
  • 2.21.0                                ...           8 years ago
  • 2.20.0                                ...           8 years ago
  • 2.19.0                                ...           8 years ago
  • 2.18.0                                ...           8 years ago
  • 2.17.1                                ...           8 years ago
  • 2.17.0                                ...           8 years ago
  • 2.16.1                                ...           8 years ago
  • 2.16.0                                ...           8 years ago
  • 2.15.1                                ...           8 years ago
  • 2.15.0                                ...           8 years ago
  • 2.14.0                                ...           8 years ago
  • 2.13.2                                ...           8 years ago
  • 2.13.1                                ...           8 years ago
  • 2.13.0                                ...           8 years ago
  • 2.12.0                                ...           8 years ago
  • 2.11.1                                ...           8 years ago
  • 2.11.0                                ...           8 years ago
  • 2.10.0                                ...           9 years ago
  • 2.9.1                                ...           9 years ago
  • 2.9.0                                ...           9 years ago
  • 2.8.0                                ...           9 years ago
  • 2.7.3                                ...           9 years ago
  • 2.7.2                                ...           9 years ago
  • 2.7.1                                ...           9 years ago
  • 2.7.0                                ...           9 years ago
  • 2.6.0                                ...           9 years ago
  • 2.5.0                                ...           9 years ago
  • 2.4.0                                ...           9 years ago
  • 2.3.11                                ...           9 years ago
  • 2.3.10                                ...           9 years ago
  • 2.3.9                                ...           9 years ago
  • 2.3.8                                ...           10 years ago
  • 2.3.7                                ...           10 years ago
  • 2.3.6                                ...           10 years ago
  • 2.3.5                                ...           10 years ago
  • 2.3.4                                ...           10 years ago
  • 2.3.3                                ...           10 years ago
  • 2.3.2                                ...           10 years ago
  • 2.3.1                                ...           10 years ago
  • 2.0.3                                ...           10 years ago
  • 2.3.0                                ...           10 years ago
  • 2.2.2                                ...           10 years ago
  • 2.2.1                                ...           10 years ago
  • 2.2.0                                ...           10 years ago
  • 2.1.0                                ...           10 years ago
  • 2.0.2                                ...           10 years ago
  • 2.0.1                                ...           10 years ago
  • 2.0.0                                ...           10 years ago
  • 0.5.18                                ...           10 years ago
  • 1.5.2                                ...           10 years ago
  • 1.5.1                                ...           10 years ago
  • 1.5.0                                ...           10 years ago
  • 1.4.1                                ...           10 years ago
  • 1.4.0                                ...           10 years ago
  • 1.3.1                                ...           10 years ago
  • 1.3.0                                ...           10 years ago
  • 1.2.1                                ...           10 years ago
  • 1.2.0                                ...           10 years ago
  • 1.1.0                                ...           10 years ago
  • 1.0.0                                ...           10 years ago
  • 0.5.17                                ...           10 years ago
  • 0.5.16                                ...           11 years ago
  • 0.5.15                                ...           11 years ago
  • 0.5.14                                ...           11 years ago
  • 0.5.13                                ...           11 years ago
  • 0.5.12                                ...           11 years ago
  • 0.5.11                                ...           11 years ago
  • 0.5.10                                ...           11 years ago
  • 0.5.9                                ...           11 years ago
  • 0.5.8                                ...           11 years ago
  • 0.5.6                                ...           11 years ago
  • 0.5.5                                ...           11 years ago
  • 0.5.4                                ...           11 years ago
  • 0.5.3                                ...           11 years ago
  • 0.5.2                                ...           11 years ago
  • 0.5.1                                ...           11 years ago
  • 0.5.0                                ...           11 years ago
  • 0.4.4                                ...           11 years ago
  • 0.4.3                                ...           11 years ago
  • 0.4.2                                ...           11 years ago
  • 0.4.1                                ...           11 years ago
  • 0.4.0                                ...           11 years ago
  • 0.3.8                                ...           11 years ago
  • 0.3.7                                ...           11 years ago
  • 0.3.6                                ...           11 years ago
  • 0.3.5                                ...           11 years ago
  • 0.3.4                                ...           12 years ago
  • 0.3.3                                ...           12 years ago
  • 0.3.2                                ...           12 years ago
  • 0.3.1                                ...           12 years ago
  • 0.3.0                                ...           12 years ago
  • 0.2.9                                ...           12 years ago
  • 0.2.8                                ...           12 years ago
  • 0.2.7                                ...           12 years ago
  • 0.2.6                                ...           12 years ago
  • 0.2.5                                ...           13 years ago
  • 0.2.4                                ...           13 years ago
  • 0.2.3                                ...           13 years ago
  • 0.2.2                                ...           13 years ago
  • 0.2.1                                ...           13 years ago
  • 0.2.0                                ...           13 years ago
  • 0.1.0                                ...           14 years ago
  • 0.0.1                                ...           14 years ago
Maintainers (1)
Downloads
Total 2
Today 0
This Week 0
This Month 1
Last Day 0
Last Week 0
Last Month 0
Dependencies (0)
None
Dev Dependencies (4)

© 2010 - cnpmjs.org x YWFE | Home | YWFE