node curl wrapper with fully implemented https://npmjs.org/package/node-curl
Find a file
Josh Sherman b12a319ebb Consider STRINGPOINT as string_options
URL changed from being an OBJECT to being a STRINGPOINT so when building
URL was being thrown as an invalid option. This resolves that but has
left me with a segfault :-/
2016-10-12 15:28:50 -05:00
examples Update README. 2013-05-25 16:19:07 +08:00
lib Extract header. 2013-05-25 16:00:35 +08:00
src Consider STRINGPOINT as string_options 2016-10-12 15:28:50 -05:00
.gitignore Improve performance. 2013-02-19 20:54:47 +08:00
.npmignore ignore *.tgz. 2012-11-29 16:36:18 +08:00
.travis.yml Update travis to test for 0.8, 0.10 2013-04-10 03:31:26 +08:00
binding.gyp Fix #15, Support multipart post. 2013-04-10 03:09:25 +08:00
index.js expose low level curl. 2013-02-19 20:12:33 +08:00
index.toffee Update Curl file structure. 2013-02-19 17:30:16 +08:00
LICENSE-MIT dynamic generate curl include file 2012-03-08 00:15:51 +08:00
package.json Bump version to 0.3.3 2014-09-03 15:41:04 +08:00
README.md Update README. 2013-05-25 16:19:07 +08:00
wscript use -O1 instead of -O2 2013-01-05 21:22:22 +08:00

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