{"id":14989937,"url":"https://github.com/jcmais/node-libcurl","last_synced_at":"2025-05-14T01:09:36.518Z","repository":{"id":16115169,"uuid":"18860314","full_name":"JCMais/node-libcurl","owner":"JCMais","description":"libcurl bindings for Node.js","archived":false,"fork":false,"pushed_at":"2024-12-26T17:20:55.000Z","size":4641,"stargazers_count":691,"open_issues_count":22,"forks_count":122,"subscribers_count":25,"default_branch":"develop","last_synced_at":"2025-05-11T17:39:41.491Z","etag":null,"topics":["c-plus-plus","curl","ftp","hacktoberfest","http-client","http2","http3","javascript","libcurl","libcurl-binding","node-addon","node-gyp","node-module","nodejs","prebuilt-binaries","quic"],"latest_commit_sha":null,"homepage":"https://npmjs.org/package/node-libcurl","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JCMais.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"patreon":"jonathancardoso","tidelift":"npm/node-libcurl"}},"created_at":"2014-04-16T23:32:43.000Z","updated_at":"2025-05-11T09:38:36.000Z","dependencies_parsed_at":"2024-01-14T15:24:22.240Z","dependency_job_id":"b0cc8f20-be1d-4267-a0e5-d16a031ff141","html_url":"https://github.com/JCMais/node-libcurl","commit_stats":{"total_commits":1181,"total_committers":28,"mean_commits":42.17857142857143,"dds":"0.28027095681625736","last_synced_commit":"2c29dc8add67f65867b159dac64d42a5448b83a8"},"previous_names":[],"tags_count":79,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCMais%2Fnode-libcurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCMais%2Fnode-libcurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCMais%2Fnode-libcurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCMais%2Fnode-libcurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JCMais","download_url":"https://codeload.github.com/JCMais/node-libcurl/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254049064,"owners_count":22005998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","curl","ftp","hacktoberfest","http-client","http2","http3","javascript","libcurl","libcurl-binding","node-addon","node-gyp","node-module","nodejs","prebuilt-binaries","quic"],"created_at":"2024-09-24T14:19:11.441Z","updated_at":"2025-05-14T01:09:31.485Z","avatar_url":"https://github.com/JCMais.png","language":"TypeScript","readme":"# node-libcurl\u003c!-- omit in toc --\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.buymeacoffee.com/jonathancardoso\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-black.png\" alt=\"Buy Me A Coffee\" height=\"52px\" width=\"190px\" /\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://www.patreon.com/bePatron?u=19985213\" data-patreon-widget-type=\"become-patron-button\" title=\"Become a Patreon\"\u003e\n    \u003cimg src=\"https://c5.patreon.com/external/logo/become_a_patron_button@2x.png\" width=\"190px\" alt=\"Patreon Logo\"\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://discord.io/jonathancardoso\" title=\"Join our Discord Server\"\u003e\n    \u003cimg src=\"https://i.imgur.com/DlKeNmn.png\" alt=\"Discord Logo\" width=\"190px\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n[![NPM version][npm-image]][npm-url]\n[![license][license-image]][license-url]\n\n[![AppVeyor CI Status][appveyor-image]][appveyor-url]\n\n[npm-image]:https://img.shields.io/npm/v/node-libcurl.svg?style=flat-square\n[npm-url]:https://www.npmjs.org/package/node-libcurl\n[appveyor-image]:https://ci.appveyor.com/api/projects/status/u7ox641jyb6hxrkt/branch/master?svg=true\n[appveyor-url]:https://ci.appveyor.com/project/JCMais/node-libcurl\n[license-image]:https://img.shields.io/npm/l/node-libcurl?style=flat-square\n[license-url]:https://raw.githubusercontent.com/JCMais/node-libcurl/develop/LICENSE\n\n\u003e The [fastest](#benchmarks) URL transfer library for Node.js.\n\n[libcurl](https://github.com/bagder/curl) bindings for Node.js. libcurl official description:\n\u003e libcurl is a free and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos), file transfer resume, http proxy tunneling and more!\n\n- [Quick Start](#quick-start)\n  - [Install](#install)\n  - [Simple Request - Async / Await using curly](#simple-request---async--await-using-curly)\n  - [Simple Request - Using Curl class](#simple-request---using-curl-class)\n  - [Setting HTTP headers](#setting-http-headers)\n  - [Form Submission (Content-Type: application/x-www-form-urlencoded)](#form-submission-content-type-applicationx-www-form-urlencoded)\n  - [MultiPart Upload / HttpPost libcurl Option (Content-Type: multipart/form-data)](#multipart-upload--httppost-libcurl-option-content-type-multipartform-data)\n  - [Binary Data](#binary-data)\n- [API](#api)\n- [Special Notes](#special-notes)\n  - [`READFUNCTION` option](#readfunction-option)\n- [Common Issues](#common-issues)\n- [Benchmarks](#benchmarks)\n- [Security](#security)\n- [Supported Libcurl Versions](#supported-libcurl-versions)\n- [For Enterprise](#for-enterprise)\n- [Detailed Installation](#detailed-installation)\n  - [Important Notes on Prebuilt Binaries / Direct Installation](#important-notes-on-prebuilt-binaries--direct-installation)\n    - [Missing Packages](#missing-packages)\n  - [Electron / NW.js](#electron--nwjs)\n    - [NW.js (aka node-webkit)](#nwjs-aka-node-webkit)\n    - [Electron (aka atom-shell)](#electron-aka-atom-shell)\n  - [Building on Linux](#building-on-linux)\n  - [Building on macOS](#building-on-macos)\n    - [Xcode \\\u003e= 10 | macOS \\\u003e= Mojave](#xcode--10--macos--mojave)\n  - [Building on Windows](#building-on-windows)\n- [Getting Help](#getting-help)\n- [Contributing](#contributing)\n- [Donations / Patreon](#donations--patreon)\n\n## Quick Start\n\n\u003e **Note**:\n\u003e - This library cannot be used in a browser, it depends on native code.\n\u003e - There is no worker threads support at the moment. See [#169](https://github.com/JCMais/node-libcurl/issues/169)\n\n### Install\n```shell\nnpm i node-libcurl --save\n```\nor\n```shell\nyarn add node-libcurl\n```\n### Simple Request - Async / Await using curly\n\u003e this API is experimental and is subject to changes without a major version bump\n\n```javascript\nconst { curly } = require('node-libcurl');\n\nconst { statusCode, data, headers } = await curly.get('http://www.google.com')\n```\n\nAny option can be passed using their `FULLNAME` or a `lowerPascalCase` format:\n```javascript\nconst querystring = require('querystring');\nconst { curly } = require('node-libcurl');\n\nconst { statusCode, data, headers } = await curly.post('http://httpbin.com/post', {\n  postFields: querystring.stringify({\n    field: 'value',\n  }),\n  // can use `postFields` or `POSTFIELDS`\n})\n```\n\nJSON POST example:\n```javascript\nconst { curly } = require('node-libcurl')\nconst { data } = await curly.post('http://httpbin.com/post', {\n  postFields: JSON.stringify({ field: 'value' }),\n  httpHeader: [\n    'Content-Type: application/json',\n    'Accept: application/json'\n  ],\n})\n\nconsole.log(data)\n```\n\n### Simple Request - Using Curl class\n```javascript\nconst { Curl } = require('node-libcurl');\n\nconst curl = new Curl();\n\ncurl.setOpt('URL', 'www.google.com');\ncurl.setOpt('FOLLOWLOCATION', true);\n\ncurl.on('end', function (statusCode, data, headers) {\n  console.info(statusCode);\n  console.info('---');\n  console.info(data.length);\n  console.info('---');\n  console.info(this.getInfo( 'TOTAL_TIME'));\n  \n  this.close();\n});\n\ncurl.on('error', curl.close.bind(curl));\ncurl.perform();\n```\n\n### Setting HTTP headers\n\nPass an array of strings specifying headers\n```javascript\ncurl.setOpt(Curl.option.HTTPHEADER,\n  ['Content-Type: application/x-amz-json-1.1'])\n```\n\n### Form Submission (Content-Type: application/x-www-form-urlencoded)\n```javascript\nconst querystring = require('querystring');\nconst { Curl } = require('node-libcurl');\n\nconst curl = new Curl();\nconst close = curl.close.bind(curl);\n\ncurl.setOpt(Curl.option.URL, '127.0.0.1/upload');\ncurl.setOpt(Curl.option.POST, true)\ncurl.setOpt(Curl.option.POSTFIELDS, querystring.stringify({\n  field: 'value',\n}));\n\ncurl.on('end', close);\ncurl.on('error', close);\n```\n\n### MultiPart Upload / HttpPost libcurl Option (Content-Type: multipart/form-data)\n\n```javascript\nconst { Curl } = require('node-libcurl');\n\nconst curl = new Curl();\nconst close = curl.close.bind(curl);\n\ncurl.setOpt(Curl.option.URL, '127.0.0.1/upload.php');\ncurl.setOpt(Curl.option.HTTPPOST, [\n    { name: 'input-name', file: '/file/path', type: 'text/html' },\n    { name: 'input-name2', contents: 'field-contents' }\n]);\n\ncurl.on('end', close);\ncurl.on('error', close);\n```\n\n### Binary Data\n\nWhen requesting binary data make sure to do one of these:\n- Pass your own `WRITEFUNCTION` (https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html):\n```javascript\ncurl.setOpt('WRITEFUNCTION', (buffer, size, nmemb) =\u003e {\n  // something\n})\n```\n- Enable one of the following flags:\n```javascript\ncurl.enable(CurlFeature.NoDataParsing)\n// or\ncurl.enable(CurlFeature.Raw)\n```\n\nThe reasoning behind this is that by default, the `Curl` instance will try to decode the received data and headers to utf8 strings, as can be seen here: https://github.com/JCMais/node-libcurl/blob/b55b13529c9d11fdcdd7959137d8030b39427800/lib/Curl.ts#L391\n\nFor more examples check the [examples folder](./examples).\n\n## API\n\nAPI documentation for the latest stable version is available at [https://node-libcurl-docs.netlify.app/modules/_lib_index_.html](https://node-libcurl-docs.netlify.app/modules/_lib_index_.html).\n\nDevelop branch documentation is available at [https://develop--node-libcurl-docs.netlify.app/modules/_lib_index_.html](https://develop--node-libcurl-docs.netlify.app/modules/_lib_index_.html).\n\nThis library provides Typescript type definitions.\n\nAlmost all [CURL options](https://curl.haxx.se/libcurl/c/curl_easy_setopt.html) are supported, if you pass one that is not, an error will be thrown.\n\nFor more usage examples check the [examples folder](./examples).\n\n## Special Notes\n\n### `READFUNCTION` option\n\nThe buffer passed as first parameter to the callback set with the [`READFUNCTION`](https://curl.haxx.se/libcurl/c/CURLOPT_READFUNCTION.html) option is initialized with the size libcurl is using in their upload buffer (which can be set with [`UPLOAD_BUFFERSIZE`](https://curl.haxx.se/libcurl/c/CURLOPT_UPLOAD_BUFFERSIZE.html)), this is initialized using `node::Buffer::Data(buf);` which is basically the same than `Buffer#allocUnsafe` and therefore, it has all the implications as to its correct usage: https://nodejs.org/pt-br/docs/guides/buffer-constructor-deprecation/#regarding-buffer-allocunsafe\n\nSo, be careful, make sure to return **exactly** the amount of data you have written to the buffer on this callback. Only that specific amount is going to be copied and handed over to libcurl.\n\n## Common Issues\n\nSee [COMMON_ISSUES.md](./COMMON_ISSUES.md)\n\n## Benchmarks\n\nSee [./benchmark](./benchmark)\n\n## Security\n\nSee [SECURITY.md](./SECURITY.md)\n\n## Supported Libcurl Versions\n\nThe addon is only tested against libcurl version `7.50.0` and the latest one available.\n\nThe code itself is made to compile with any version greater than `7.32.0`, any libcurl version lower than that is **not** supported.\n\n## For Enterprise\n\n`node-libcurl` is available as part of the [Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-node-libcurl?utm_source=npm-node-libcurl\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo).\n\nThe maintainers of node-libcurl and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-node-libcurl?utm_source=npm-node-libcurl\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo)\n\n## Detailed Installation\n\nThe latest version of this package has prebuilt binaries (thanks to [node-pre-gyp](https://github.com/mapbox/node-pre-gyp/)) \n available for:\n* Node.js: Latest two versions on active LTS (see https://github.com/nodejs/Release)\n* Electron: Latest 3 major versions\n* NW.js (node-webkit): Latest 3 major (minor for nw.js case) versions\n\nAnd on the following platforms:\n* Linux 64 bits\n* macOS Intel \u0026 ARM64 (M1+)\n* Windows 32 and 64 bits\n\nInstalling with `yarn add node-libcurl` or `npm install node-libcurl` should download a prebuilt binary and no compilation will be needed. However if you are trying to install on `nw.js` or `electron` additional steps will be required, check their corresponding section below.\n\nThe prebuilt binary is statically built with the following library versions, features and protocols (library versions may change between Node.js versions):\n```\nVersion: libcurl/7.73.0 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.7 zstd/1.4.9 c-ares/1.16.1 libidn2/2.1.1 libssh2/1.9.0 nghttp2/1.41.0\nProtocols: dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, mqtt, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp\nFeatures: AsynchDNS, IDN, IPv6, Largefile, NTLM, NTLM_WB, SSL, libz, brotli, TLS-SRP, HTTP2, UnixSockets, HTTPS-proxy\n```\n\nIf there is no prebuilt binary available that matches your system, or if the installation fails, then you will need an environment capable of compiling Node.js addons, which means:\n- [python 3.x](https://www.python.org/downloads/) installed\n- updated C++ compiler able to compile C++17 (C++20 for Electron \u003e= v32).\n\nIf you don't want to use the prebuilt binary even if it works on your system, you can pass a flag when installing:\n\u003e With `npm`\n```sh\nnpm install node-libcurl --build-from-source\n```\n\u003e With `yarn`\n```sh\nnpm_config_build_from_source=true yarn add node-libcurl\n```\n\n### Important Notes on Prebuilt Binaries / Direct Installation\n\n\u003e Those notes are not important when building on Windows\n\nThe prebuilt binaries are statically linked with `brotli`, `libidn2`, `libssh2`, `openLDAP`, `OpenSSL` `nghttp2`, `zstd` and `zlib`.\n\nThe `brotli`, `nghttp2`, `OpenSSL` and `zlib` versions **must** match the version Node.js uses, this is necessary to avoid any possible issues by mixing library symbols of different versions, since Node.js also exports some of the symbols of their deps.\n\nIn case you are building the addon yourself with the libraries mentioned above, you must make sure their version is ABI compatible with the one Node.js uses, otherwise you are probably going to hit a Segmentation Fault.\n\nIf you want to build a statically linked version of the addon yourself, you need to pass the `curl_static_build=true` flag when calling install.\n\n\u003e If using `npm`:\n```sh\nnpm install node-libcurl --build-from-source --curl_static_build=true\n```\n\u003e If using `yarn`:\n```sh\nnpm_config_build_from_source=true npm_config_curl_static_build=true yarn add node-libcurl\n```\n\nThe build process will use `curl-config` available on path, if you want to overwrite it to your own libcurl installation one, you can set the `curl_config_bin` variable, like mentioned above for `curl_static_build`.\n\nAnd if you don't want to use `curl-config`, you can pass two extra variables to control the build process:\n- `curl_include_dirs`\n    Space separated list of directories to search for header files\n- `curl_libraries`\n    Space separated list of flags to pass to the linker\n\n#### Missing Packages\n\nThe statically linked version currently does not have support for `GSS-API`, `SPNEGO`, `KERBEROS`, `RTMP`, `Metalink`, `PSL` and `Alt-svc`.\n\nThe scripts to build Kerberos exists on the `./scripts/ci` folder, but it was removed for two reasons:\n- If built with Heimdal, the addon becomes too big\n- If built with MIT Kerberos, the addon would be bound to their licensing terms.\n\n### Electron / NW.js\n\nIf building for a `Electron` or `NW.js` you need to pass additional parameters to the install command.\n\nIf you do not want to use the prebuilt binary, pass the `npm_config_build_from_source=true` / `--build-from-source` flag to the install command.\n\n#### NW.js (aka node-webkit)\nFor building from source on NW.js you first need to make sure you have nw-gyp installed globally:\n`yarn global add nw-gyp` or `npm i -g nw-gyp`\n\n\u003e If on Windows, you also need addition steps, currently the available win_delay_load_hook.cc on `nw-gyp` is not working with this addon, so it's necessary to apply a patch to it. The patch can be found on `./scripts/ci/patches/win_delay_load_hook.cc.patch`, and should be applied to the file on `\u003cnw-gyp-folder\u003e/src/win_delay_load_hook.cc`.\n\nThen:\n\u003e yarn\n```\nnpm_config_runtime=node-webkit npm_config_target=0.38.2 yarn add node-libcurl\n```\n\u003e npm\n```bash\nnpm install node-libcurl --runtime=node-webkit --target=0.38.2 --save\n```\n\nwhere `--target` is the current version of NW.js you are using\n\n#### Electron (aka atom-shell)\n\n\u003e yarn\n```bash\nnpm_config_runtime=electron npm_config_target=X.Y.Z npm_config_disturl=https://www.electronjs.org/headers yarn add node-libcurl\n```\n\n\u003e npm\n```bash\nnpm install node-libcurl --runtime=electron --target=X.Y.Z --disturl=https://www.electronjs.org/headers --save\n```\n\nWhere `--target` is the version of electron you are using, in our case, we are just using the version returned by the locally installed `electron` binary.\n\nYou can also put those args in a .npmrc file, like so:\n\n```bash\nruntime = electron\ntarget = 5.0.1\ntarget_arch = x64\ndist_url = https://atom.io/download/atom-shell\n```\n\n### Building on Linux\n\nTo build the addon on linux based systems you must have:\n- gcc \u003e= 7\n- libcurl dev files\n- python \u003e= 3\n- OS that is not past their EOL.\n\nIf you are on a debian based system, you can get those by running:\n```bash\nsudo apt-get install python libcurl4-openssl-dev build-essential\n```\n\nIf you don't want to use the libcurl version shipped with your system, since it's probably very old, you can install libcurl from source, for the addon to use that libcurl version you can use the variable mentioned above, `curl_config_bin`.\n\nIn case you want some examples check the CI configuration files ([`.travis.yml`](./.travis.yml), [`.circleci/config.yml`](./.circleci/config.yml)) and the [`scripts/ci/`](./scripts/ci) folder.\n\n### Building on macOS\n\nOn macOS you must have:\n- macOS \u003e= 11.6 (Big Sur)\n- Xcode Command Line Tools\n\nYou can check if you have Xcode Command Line Tools be running:\n```sh\nxcode-select -p\n```\n\nIt should return their path, in case it returns nothing, you must install it by running:\n```sh\nxcode-select --install\n```\n\n#### Xcode \u003e= 10 | macOS \u003e= Mojave\nIn case you have errors installing the addon from source, and you are using macOS version \u003e= Mojave, check if the error you are receiving is the following one:\n```\n  CXX(target) Release/obj.target/node_libcurl/src/node_libcurl.o\n  clang: error: no such file or directory: '/usr/include'\n```\n\nIf that is the case, it's because newer versions of the Command Line Tools does not add the `/usr/include` folder by default. Check [Xcode 10 release notes](https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035624) for details.\n\nThe `/usr/include` is now available on `$(xcrun --show-sdk-path)/usr/include`. To correctly build libcurl you then need to pass that path to the `npm_config_curl_include_dirs` environment variable:\n```\nnpm_config_curl_include_dirs=\"$(xcrun --show-sdk-path)/usr/include\" yarn add node-libcurl\n```\n\n### Building on Windows\n\nIf installing using a prebuilt binary you only need to have the [visual c++ 2017 runtime library](https://visualstudio.microsoft.com/downloads/#microsoft-visual-c-redistributable-for-visual-studio-2017).\n\nIf building from source, you must have:\n- Python 3.x\n- [Visual Studio \u003e= 2017](https://visualstudio.microsoft.com/downloads/)\n- [nasm](https://www.nasm.us/)\n\nPython 3.x and the Visual Studio compiler can be installed by running:\n```sh\nnpm install --global --production windows-build-tools\n```\n\n`nasm` can be obtained from their website, which is linked above, or using chocolatey:\n```\nchoco install nasm\n```\n\nCurrently there is no support to use other libcurl version than the one provided by the [curl-for-windows](https://github.com/JCMais/curl-for-windows) submodule (help is appreciated on adding this feature).\n\nAn important note about building the addon on Windows is that we have to do some \"hacks\" with the header files included by `node-gyp`/`nw-gyp`. The reason for that is because as we are using a standalone version of OpenSSL, we don't want to use the OpenSSL headers provided by Node.js, which are by default added to `\u003cnw-gyp-or-node-gyp-folder\u003e/include/node/openssl`, so what we do is that before compilation that folder is renamed to `openssl.disabled`. After a successful installation the folder is renamed back to their original name, **however** if any error happens during compilation the folder will stay renamed until the addon is compiled successfully. More info on why that was needed and some context can be found on issue [#164](https://github.com/JCMais/node-libcurl/issues/164).\n\n## Getting Help\n\nIf your question is directly related to the addon or their usage, you can get help the following ways:\n- Post a question on `stack-overflow` and use the `node-libcurl` tag.\n- [Join our Discord server](https://discord.gg/3vacxRY) and send your question there.\n\n## Contributing\n\nRead [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## Donations / Patreon\n\nSome people have been asking if there are any means to support my work, I've created a patreon page for that: https://www.patreon.com/jonathancardoso\n\nIf you want to donate via PayPal, use the same e-mail that is available on my GitHub profile: https://github.com/JCMais\n\nAnd thanks for reading till here! 😄\n\n_Originally this addon was based on the work from [jiangmiao/node-curl](https://github.com/jiangmiao/node-curl), things have changed and most if not all code has been rewritten._\n","funding_links":["https://patreon.com/jonathancardoso","https://tidelift.com/funding/github/npm/node-libcurl","https://www.buymeacoffee.com/jonathancardoso","https://www.patreon.com/bePatron?u=19985213","https://tidelift.com/subscription/pkg/npm-node-libcurl?utm_source=npm-node-libcurl\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo","https://www.patreon.com/jonathancardoso"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcmais%2Fnode-libcurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcmais%2Fnode-libcurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcmais%2Fnode-libcurl/lists"}