Skip to content

Latest commit

 

History

History
190 lines (132 loc) · 4.38 KB

README.md

File metadata and controls

190 lines (132 loc) · 4.38 KB

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();