{"id":13447594,"url":"https://github.com/chill117/proxy-lists","last_synced_at":"2025-12-27T02:17:02.974Z","repository":{"id":47337828,"uuid":"44026377","full_name":"chill117/proxy-lists","owner":"chill117","description":"Node.js module and CLI tool to get proxies from publicly available proxy lists.","archived":false,"fork":false,"pushed_at":"2021-09-02T15:57:00.000Z","size":852,"stargazers_count":626,"open_issues_count":12,"forks_count":105,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-10-21T01:28:59.585Z","etag":null,"topics":["nodejs","proxies"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/chill117.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":"https://degreesofzero.com/donate.html?project=proxy-lists"}},"created_at":"2015-10-10T20:08:40.000Z","updated_at":"2025-10-08T11:46:40.000Z","dependencies_parsed_at":"2022-07-22T20:10:48.325Z","dependency_job_id":null,"html_url":"https://github.com/chill117/proxy-lists","commit_stats":null,"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/chill117/proxy-lists","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-lists","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-lists/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-lists/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-lists/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chill117","download_url":"https://codeload.github.com/chill117/proxy-lists/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-lists/sbom","scorecard":{"id":277640,"data":{"date":"2025-08-11","repo":{"name":"github.com/chill117/proxy-lists","commit":"49b16bfe035af559fb9e2eb822d3fc39b24dab4d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 2/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/chill117/proxy-lists/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/chill117/proxy-lists/ci.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-gpvc-mx6g-cchv","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T14:56:21.536Z","repository_id":47337828,"created_at":"2025-08-17T14:56:21.536Z","updated_at":"2025-08-17T14:56:21.536Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28069276,"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","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["nodejs","proxies"],"created_at":"2024-07-31T05:01:21.941Z","updated_at":"2025-12-27T02:17:02.954Z","avatar_url":"https://github.com/chill117.png","language":"JavaScript","funding_links":["https://degreesofzero.com/donate.html?project=proxy-lists"],"categories":["JavaScript"],"sub_categories":[],"readme":"# proxy-lists\n\n![Build Status](https://github.com/chill117/proxy-lists/actions/workflows/ci.yml/badge.svg)\n\nNode.js module for getting proxies from publicly available proxy lists. Support for more than two dozen different proxy lists. You can see the full list of proxy sources [here](https://github.com/chill117/proxy-lists/tree/master/sources).\n\nMissing a proxy list that you think should be supported? [Open an issue](https://github.com/chill117/proxy-lists/issues) to suggest it be added as a source. Or you can [add a new source](#addsource) and [create a pull request](https://github.com/chill117/proxy-lists/pulls/new) to have it added to this module.\n\n* [Installation](#installation)\n  * [Update GeoIp Database](#update-geoip-database)\n* [Command-line interface](#command-line-interface)\n* [API](#api)\n  * [getProxies](#getproxies)\n    * [Options](#options-for-getproxies-method)\n    * [Proxy Object](#proxy-object)\n  * [getProxiesFromSource](#getproxiesfromsource)\n    * [Options](#options-for-getproxiesfromsource-method)\n  * [addSource](#addsource)\n  * [listSources](#listsources)\n    * [Options](#options-for-listsources-method)\n* [Usage with Proxy](#usage-with-proxy)\n* [Contributing](#contributing)\n\t* [Configure Local Environment](#configure-local-environment)\n\t* [Tests](#tests)\n* [Changelog](#changelog)\n* [License](#license)\n* [Funding](#funding)\n\n\n## Installation\n\nIf you wish to use this module as a [CLI tool](#command-line-interface), install it globally via npm:\n```\nnpm install -g proxy-lists\n```\n\nOtherwise, you can add it to your existing node application like this:\n```\nnpm install proxy-lists --save\n```\nThis will install `proxy-lists` and add it to your application's `package.json` file.\n\n\n### Update GeoIp Database\n\nThis module uses [geoip-lite](https://github.com/bluesmoon/node-geoip) to perform geoip-country lookups on IP addresses of proxies. The geoip-lite module ships with the free version of MaxMind's geoip database. This database stopped being directly included in the module due to a change on MaxMind's side - specifically with their end-user licensing agreements. So it is necessary for each end-user (that's you!) to [create their own MaxMind account](https://www.maxmind.com/en/geolite2/signup) and then [generate a license key](https://support.maxmind.com/account-faq/license-keys/how-do-i-generate-a-license-key/).\n\nIf you are using this module inside another project (via the API), use the following command to update the geoip database:\n```bash\nnpm run update:geoip-database license_key=YOUR_LICENSE_KEY\n```\n\nIf you are using the CLI:\n```bash\nproxy-lists updateGeoIpData --license-key YOUR_LICENSE_KEY\n```\n\n\n## Command-line interface\n\nThis section assumes that you have `proxy-lists` installed globally and that it is available on your current user's PATH.\n\nTo view the help screen for the CLI tool:\n```\nproxy-lists --help\n```\n\nTo view the help screen for the `getProxies` command:\n```\nproxy-lists getProxies --help\n```\n\nTo output the proxies in `.txt` format:\n```\nproxy-lists getProxies --output-format=\"txt\"\n```\n\nTo output proxies to STDOUT:\n```\nproxy-lists getProxies --stdout\n```\n\nTo output proxies to a different file than proxies.txt:\n```\nproxy-lists getProxies --output-file=\"somefile.txt\"\n```\n\nTo get proxies from specific sources:\n```\nproxy-lists getProxies --sources-white-list=\"gatherproxy,sockslist\"\n```\n\nTo get proxies from specific countries:\n```\nproxy-lists getProxies --countries=\"us,ca\"\n```\n\nTo get proxies with specific protocols:\n```\nproxy-lists getProxies --protocols=\"http,https\"\n```\n\nTo get only anonymous and elite proxies:\n```\nproxy-lists getProxies --anonymity-levels=\"anonymous,elite\"\n```\n\nThe output of the `getProxies` command is written to a new file (`proxies.txt`) in your current working directory.\n\n\n## API\n\nThese are the public methods of the `ProxyLists` module that allow you to get proxies, add custom proxy sources, and list existing sources.\n\n### getProxies\n\n`getProxies([options])`\n\nGets proxies from all available proxy lists.\n\nUsage:\n```js\nvar ProxyLists = require('proxy-lists');\n\n// `getProxies` returns an event emitter.\nProxyLists.getProxies({\n\t// options\n\tcountries: ['us', 'ca']\n})\n\t.on('data', function(proxies) {\n\t\t// Received some proxies.\n\t\tconsole.log('got some proxies');\n\t\tconsole.log(proxies);\n\t})\n\t.on('error', function(error) {\n\t\t// Some error has occurred.\n\t\tconsole.log('error!', error);\n\t})\n\t.once('end', function() {\n\t\t// Done getting proxies.\n\t\tconsole.log('end!');\n\t});\n```\n\nSample `proxies`:\n```js\n[\n\t{\n\t\tipAddress: '123.123.2.42',\n\t\tport: 8080,\n\t\tcountry: 'us',\n\t\tsource: 'superproxies'\n\t},\n\t{\n\t\tipAddress: '234.221.233.142',\n\t\tport: 3128,\n\t\tcountry: 'cz',\n\t\tprotocols: ['https'],\n\t\tsource: 'someproxysource'\n\t},\n\t{\n\t\tipAddress: '234.221.233.142',\n\t\tport: 3128,\n\t\tcountry: 'cz',\n\t\tanonymityLevel: 'elite',\n\t\tprotocols: ['https'],\n\t\tsource: 'anotherproxysource'\n\t}\n]\n```\n\n#### Options for getProxies Method\n\n```js\nvar options = {\n\t/*\n\t\tThe filter mode determines how some options will be used to exclude proxies.\n\n\t\tFor example if using this option `anonymityLevels: ['elite']`:\n\t\t\t'strict' mode will only allow proxies that have the 'anonymityLevel' property equal to 'elite'; ie. proxies that are missing the 'anonymityLevel' property will be excluded.\n\t\t\t'loose' mode will allow proxies that have the 'anonymityLevel' property of 'elite' as well as those that are missing the 'anonymityLevel' property.\n\t*/\n\tfilterMode: 'strict',\n\n\t/*\n\t\tWhether or not to emit only unique proxies (HOST:PORT).\n\t*/\n\tunique: true,\n\n\t/*\n\t\tGet proxies for the specified countries.\n\n\t\tTo get all proxies, regardless of country, set this option to NULL.\n\n\t\tSee:\n\t\thttps://en.wikipedia.org/wiki/ISO_3166-1\n\n\t\tOnly USA and Canada:\n\t\t['us', 'ca']\n\t*/\n\tcountries: null,\n\n\t/*\n\t\tExclude proxies from the specified countries.\n\n\t\tTo exclude Germany and Great Britain:\n\t\t['de', 'gb']\n\t*/\n\tcountriesBlackList: null,\n\n\t/*\n\t\tGet proxies that use the specified protocols.\n\n\t\tTo get all proxies, regardless of protocol, set this option to NULL.\n\n\t\tTo get proxies with specified protocols:\n\t\t['socks4', 'socks5']\n\t*/\n\tprotocols: null,\n\n\t/*\n\t\tAnonymity level.\n\n\t\tTo get all proxies, regardless of anonymity level, set this option to NULL.\n\n\t\tTo get proxies with specified anonymity-levels:\n\t\t['elite', 'anonymous']\n\t*/\n\tanonymityLevels: null,\n\n\t/*\n\t\tInclude proxy sources by name.\n\n\t\tOnly 'freeproxylists':\n\t\t['freeproxylists']\n\t*/\n\tsourcesWhiteList: null,\n\n\t/*\n\t\tExclude proxy sources by name.\n\n\t\tAll proxy sources except 'freeproxylists':\n\t\t['freeproxylists']\n\t*/\n\tsourcesBlackList: null,\n\n\t/*\n\t\tFull path to the sources directory.\n\t*/\n\tsourcesDir: path.join(__dirname, 'sources'),\n\n\t/*\n\t\tSet to TRUE to have all asynchronous operations run in series.\n\t*/\n\tseries: false,\n\n\t/*\n\t\tOptions to pass to puppeteer when creating a new browser instance.\n\t*/\n\tbrowser: {\n\t\theadless: true,\n\t\tslowMo: 0,\n\t\ttimeout: 10000,\n\t},\n\n\t/*\n\t\tDefault request module options. For example you could pass the 'proxy' option in this way.\n\n\t\tSee for more info:\n\t\thttps://github.com/request/request#requestdefaultsoptions\n\t*/\n\tdefaultRequestOptions: null,\n\n\t/*\n\t\tUse a queue to limit the number of simultaneous HTTP requests.\n\t*/\n\trequestQueue: {\n\t\t/*\n\t\t\tThe maximum number of simultaneous requests.\n\t\t*/\n\t\tconcurrency: 1,\n\t\t/*\n\t\t\tThe time (in milliseconds) between each request. Set to 0 for no delay.\n\t\t*/\n\t\tdelay: 0,\n\t},\n};\n```\n\n#### Proxy Object\n\nThe proxy object has the following properties:\n* __ipAddress__ - `string` The IP address of the proxy.\n* __port__ - `integer` The port number of the proxy.\n* __country__ - `string` [Alpha-2 country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the country in which the proxy is geo-located.\n* __source__ - `string` The name of the proxy list from which the proxy was gathered.\n* __protocols__ - _optional_ `array` An array of protocols that the proxy supports. May contain one or more of the following:\n  * __http__ - The proxy uses HTTP.\n  * __https__ - The proxy uses HTTPS.\n  * __socks5__ - The proxy server uses the [socks5](https://en.wikipedia.org/wiki/SOCKS#SOCKS5) protocol.\n  * __socks4__ - The proxy server uses the [socks4](https://en.wikipedia.org/wiki/SOCKS#SOCKS4) protocol.\n* __anonymityLevel__ - _optional_ `string` The anonymity level of the proxy. Can be any one of the following:\n  * __transparent__ - The proxy does not hide the requester's IP address.\n  * __anonymous__ - The proxy hides the requester's IP address, but adds headers to the forwarded request that make it clear that the request was made using a proxy.\n  * __elite__ - The proxy hides the requester's IP address and does not add any proxy-related headers to the request.\n\nThe attributes marked as _optional_ above might not be given for all proxies. Some proxy lists are missing this information.\n\nIt's important to note that this module does __NOT__ verify all of the information provided by the proxy lists from which the proxies are gathered. If you need to check that proxies work, verify their anonymity level, whether or not they support tunneling; use [proxy-verifier](https://github.com/chill117/proxy-verifier).\n\n\n### getProxiesFromSource\n\n`getProxiesFromSource(name, [options])`\n\nGets proxies from a specific proxy list.\n\nUsage:\n```js\nvar ProxyLists = require('proxy-lists');\n\n// `getProxiesFromSource` returns an event emitter.\nProxyLists.getProxiesFromSource('freeproxylists', {\n\tanonymityLevels: ['elite']\n})\n\t.on('data', function(proxies) {\n\t\t// Received some proxies.\n\t\tconsole.log('got some proxies');\n\t\tconsole.log(proxies);\n\t})\n\t.on('error', function(error) {\n\t\t// Some error has occurred.\n\t\tconsole.log('error!', error);\n\t})\n\t.once('end', function() {\n\t\t// Done getting proxies.\n\t\tconsole.log('end!');\n\t});\n```\n\n#### Options for getProxiesFromSource Method\n\nSee [Options for getProxies Method](#options-for-getproxies-method).\n\n\n### addSource\n\n`addSource(name, source)`\n\nAdd a custom proxy source to the list of available proxies. The new proxy source will be used in addition to the existing sources, when calling `getProxies()`.\n\nUsage:\n```js\nvar ProxyLists = require('proxy-lists');\n\nProxyLists.addSource('my-custom-source', {\n\thomeUrl: 'https://somewhere.com',\n\tgetProxies: function(options) {\n\n\t\tvar emitter = options.newEventEmitter();\n\n\t\t_.defer(function() {\n\t\t\t// When an error occurs, use the 'error' event.\n\t\t\t// The 'error' event can be emitted more than once.\n\t\t\temitter.emit('error', new Error('Something bad happened!'));\n\n\t\t\t// When proxies are ready, use the 'data' event.\n\t\t\t// The 'data' event can be emitted more than once.\n\t\t\temitter.emit('data', proxies);\n\n\t\t\t// When done getting proxies, emit the 'end' event.\n\t\t\t// The 'end' event should be emitted once.\n\t\t\temitter.emit('end');\n\t\t});\n\n\t\t// Must return an event emitter.\n\t\treturn emitter;\n\t}\n});\n```\n\nYour proxy source is required to return the following for each proxy: `ipAddress`, `port`. See [Proxy Object](#proxy-object) above for more information.\n\nPlease consider sharing your custom proxy sources by [creating a pull request](https://github.com/chill117/proxy-lists/pulls/new) to have them added to this module so that others can use them too.\n\n#### Important Options to Note\n\nPlease note that there are a couple options that you should respect in your custom proxy source:\n* **sample** - `boolean` If `options.sample` is `true` then you should do your best to make the fewest number of HTTP requests to the proxy source but still get at least some real proxies. The purpose of this option is to reduce the strain caused by this module's unit tests on each proxy sources' servers.\n* **series** - `boolean` If `options.series` is `true` you should make sure that all asynchronous code in your custom source is run in series, NOT parallel. The purpose is to reduce the memory usage of the module so that it can be run in low-memory environments such as a VPS with 256MB of RAM.\n\n\n### listSources\n\n`listSources([options])`\n\nGet list of all available proxy sources.\n\nUsage:\n```js\nvar ProxyLists = require('proxy-lists');\n\nvar sources = ProxyLists.listSources();\n```\n\nSample `sources`:\n```js\n[\n\t{\n\t\tname: 'freeproxylists',\n\t\thomeUrl: 'http://www.freeproxylists.com'\n\t},\n\t{\n\t\tname: 'gatherproxy',\n\t\thomeUrl: 'http://www.gatherproxy.com'\n\t}\n]\n```\n\n#### Options for listSources Method\n\n```js\nvar options = {\n\t/*\n\t\tInclude proxy sources by name.\n\n\t\tOnly 'freeproxylists':\n\t\t['freeproxylists']\n\t*/\n\tsourcesWhiteList: null,\n\n\t/*\n\t\tExclude proxy sources by name.\n\n\t\tAll proxy sources except 'freeproxylists':\n\t\t['freeproxylists']\n\t*/\n\tsourcesBlackList: null\n};\n```\n\n\n## Usage with Proxy\n\nIt is possible to use a proxy while getting proxies, using the `\"browser\"` and `\"defaultRequestOptions\"` options. This module uses both request and puppeteer under-the-hood to scrape web pages. So you will have to configure both of those to use a proxy while getting proxies from every possible source.\n\nHere is an example using the API:\n```js\nvar ProxyLists = require('proxy-lists');\n\nProxyLists.getProxies({\n\tbrowser: {\n\t\t// arguments passed to puppeteer browser instance:\n\t\targs: [ '--proxy-server=127.0.0.1:9876' /* your proxy */ ]\n\t},\n\tdefaultRequestOptions: {\n\t\t// Passed as default options to the request module.\n\t\t// Read the following for details about proxy usage and request:\n\t\t// https://github.com/request/request#proxies\n\t\tproxy: 'http://127.0.0.1:9876',\n\t}\n})\n\t.on('data', function(proxies) {\n\t\tconsole.log(proxies);\n\t});\n```\nIt is not currently possible to pass the above options via the CLI. But if you'd like to add this feature, pull requests are welcome ;)\n\n\n## Contributing\n\nThere are a number of ways you can contribute:\n\n* **Improve or correct the documentation** - All the documentation is in this `readme.md` file. If you see a mistake, or think something should be clarified or expanded upon, please [submit a pull request](https://github.com/chill117/proxy-lists/pulls/new)\n* **Report a bug** - Please review [existing issues](https://github.com/chill117/proxy-lists/issues) before submitting a new one; to avoid duplicates. If you can't find an issue that relates to the bug you've found, please [create a new one](https://github.com/chill117/proxy-lists/issues).\n* **Request a feature** - Again, please review the [existing issues](https://github.com/chill117/proxy-lists/issues) before posting a feature request. If you can't find an existing one that covers your feature idea, please [create a new one](https://github.com/chill117/proxy-lists/issues).\n* **Fix a bug** - Have a look at the [existing issues](https://github.com/chill117/proxy-lists/issues) for the project. If there's a bug in there that you'd like to tackle, please feel free to do so. I would ask that when fixing a bug, that you first create a failing test that proves the bug. Then to fix the bug, make the test pass. This should hopefully ensure that the bug never creeps into the project again. After you've done all that, you can [submit a pull request](https://github.com/chill117/proxy-lists/pulls/new) with your changes.\n\n\n### Configure Local Environment\n\n#### Step 1: Get the Code\n\nFirst, you'll need to pull down the code from GitHub:\n```\ngit clone https://github.com/chill117/proxy-lists.git\n```\n\n#### Step 2: Install Dependencies\n\nSecond, you'll need to install the project dependencies as well as the dev dependencies. To do this, simply run the following from the directory you created in step 1:\n```bash\nnpm install\n```\n\n### Tests\n\nThis project includes an automated regression test suite. To run the tests:\n```bash\nnpm test\n```\n\n\n## Changelog\n\nSee [changelog.md](https://github.com/chill117/proxy-lists/blob/master/changelog.md)\n\n\n## License\n\nThis software is [MIT licensed](https://tldrlegal.com/license/mit-license):\n\u003e A short, permissive software license. Basically, you can do whatever you want as long as you include the original copyright and license notice in any copy of the software/source.  There are many variations of this license in use.\n\n\n## Funding\n\nThis project is free and open-source. If you would like to show your appreciation by helping to fund the project's continued development and maintenance, you can find available options [here](https://degreesofzero.com/donate.html?project=proxy-lists).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchill117%2Fproxy-lists","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchill117%2Fproxy-lists","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchill117%2Fproxy-lists/lists"}