GithubHelp home page GithubHelp logo

cget's Introduction

cget

build status dependency status npm version

cget is a robust streaming parallel download manager with a filesystem cache and a simple API.

Features

  • Promise-based API, returns HTTP headers and a Node.js stream with contents.
  • Filesystem cache mirrors remote hosts and their directory structure.
    • Easy to bypass cget and look at cached files.
  • Stores headers in separate .header.json files.
  • Caches HTTP errors to avoid repeating failing requests.
  • Limits concurrent downloads automatically using cwait.
  • Follows and caches redirect headers.
  • Built on top of request.
  • Optionally allow streaming from file:// URLs, bypassing the cache.
  • Add arbitrary files in the cache with any URI (URL or URN) as the key.
  • Written in TypeScript.

cget is perfect for downloading and caching various schema files, and is used in cxsd

Usage

Cached downloads

var Cache = require('cget').Cache;

// Store files in "cache" subdirectory next to this script.
var basePath = require('path').join(__dirname, 'cache');

// Initialize the download cache.
var cache = new Cache(basePath, {

  // Allow up to 2 parallel downloads.
  concurrency: 2

});

// Download a web page and print some info.

cache.fetch('http://www.google.com/').then(function(result) {

  console.log('Remote address:   ' + result.address.url);
  console.log('Local cache path: ' + result.address.path);
  console.log('HTTP status code: ' + result.status + ' ' + result.message);

  console.log('Headers:');
  console.log(result.headers);

  console.log('Content:');
  result.stream.pipe(process.stdout);

});

Running it the first time prints and saves the downloaded file and its headers including any redirects in local files, for example:

  • cache/www.google.com.header.json
  • cache/www.google.<COUNTRY>/<NONCE>
  • cache/www.google.<COUNTRY>/<NONCE>.header.json

The second time it prints the exact same output, but without needing a network connection.

Caching arbitrary files

The store method supports caching a string with any URI (URL or URN) as the key:

var cache = new (require('cget').Cache)();

cache.store('urn:x-inspire:specification:gmlas:GeographicalNames:3.0', 'Some data');

cache.store('http://inspire.ec.europa.eu/schemas/ad/4.0', 'More data');

License

The MIT License

Copyright (c) 2015-2017 BusFaster Ltd

cget's People

Contributors

jjrv avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.