Skip to content
This repository

node curl wrapper with fully implemented

branch: master
README.md

node-curl Build Status

node cURL wrapper, support all options and infos.

Quick Start

  • quick start

    curl = require('node-curl');
    curl('www.google.com', function(err) {
      console.info(this.status);
      console.info('-----');
      console.info(this.body);
      console.info('-----');
      console.info(this.info('SIZE_DOWNLOAD'));
    });
    
  • with options

    curl = require('node-curl')
    curl('www.google.com', {VERBOSE: 1, RAW: 1}, function(err) {
      console.info(this);
    });
    
  • run the example/test.js

    node examples/test.js
    

Usage

  • curl

    curl(url, [options = {}], callback)
    callback includes 1 parameters (error)
    result is stored in curl
    
  • Retrieve Data from curl

    members:
      status           - Http Response code
      body             - Http body
      header           - Http header
    
      url              - the url set by curl(...)
      options          - the options set by curl(...)
      defaultOptions   - the defaultOptions
      effectiveOptions - the options curl used
    
    methods:
      info(name) - Get information of result, see 'info' section
    
    REMARK:
        If the http is redirected, then header will contain at least 2 http headers.
    
  • Curl Control

    members
        debug (default: false)
            - logging node-curl debug info
    
    methods:
        void reset()
            - reset curl and set options to default options
    
        void setDefaultOptions(options, reset = true)
            - set default options
    
        curl create(defaultOptions)
            - create a new curl with default options
    

Options

  • Any cURL Easy Options

    eg: CURLOPT_VERBOSE will be VERBOSE, CURLOPT_HEADER will be HEADER
    
    Full list at http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
    
  • node-curl Extra Options

    RAW   - Returns Buffer instead of String in result.body
    DEBUG - Replace curl.debug
    
  • About slist parameters

    node-curl support slist which map to Javascript Array
    
    eg:
        HTTPHEADER: ['FOO', 'BAR']
        HTTPHEADER: 'FOO'
    
        any non-array parameter will convert to [ parameter.toString() ]
    

Infos

  • Any cURL Info options

    eg: CURLINFO_EFFECTIVE_URL will be EFFETCTIVE_URL
    
    full list at http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
    
  • About slist

      slist will be returns in Array
      eg: CURLINFO_COOKIELIST
    

MultiPart Upload

Use MULTIPART option

There are 4 options in MULTIPART, name, file, type, contents

curl('127.0.0.1/upload.php', {
    MULTIPART: [
        {name: 'file', file: '/file/path', type: 'text/html'},
        {name: 'sumbit', contents: 'send'}
    ]
}, function(e) {
    console.log(e);
    console.log(this.body);
    this.close()
});

Low Level Curl Usage

require 'node-curl/lib/Curl'

Methods:

Curl setopt(optionName, optionValue)
Curl perform()
Curl on(eventType, callback)
Mixed getinfo(infoName)

Events:

'data', function(Buffer chunk) {}
'header', function(Buffer chunk) {}
'error', function(Error error) {}
'end', function() {}

Example: examples/low-level.js

var Curl = require('node-curl/lib/Curl')

var p = console.log;
var url = process.argv[2];

var curl = new Curl();

if (!url)
    url = 'www.yahoo.com';

curl.setopt('URL', url);
curl.setopt('CONNECTTIMEOUT', 2);

// on 'data' must be returns chunk.length, or means interrupt the transfer
curl.on('data', function(chunk) {
    p("receive " + chunk.length);
    return chunk.length;
});

curl.on('header', function(chunk) {
    p("receive header " + chunk.length);
    return chunk.length;
})

// curl.close() should be called in event 'error' and 'end' if the curl won't use any more.
// or the resource will not release until V8 garbage mark sweep.
curl.on('error', function(e) {
    p("error: " + e.message);
    curl.close();
});


curl.on('end', function() {
    p('code: ' + curl.getinfo('RESPONSE_CODE'));
    p('done.');
    curl.close();
});

curl.perform();
Something went wrong with that request. Please try again.