Get free working proxies from https://www.sslproxies.org/, https://www.us-proxy.org/, https://free-proxy-list.net/uk-proxy.html and https://free-proxy-list.net and use them in your script
The FreeProxy class scrapes proxies from https://www.sslproxies.org/, https://www.us-proxy.org/, https://free-proxy-list.net/uk-proxy.html, and https://free-proxy-list.net and checks to make sure that it works. You can filter proxies by country, and specify an acceptable timeout. You can also randomize the list of proxies, rather than going in the order that they are scraped in.
You can use this to send requests through a custom proxy, with Selenium, or with anything else.
Returns proxy as string:
'http://113.160.218.14:8888'- Python 3 (3.9+)
- Requests library
- Lxml library
- Aiohttp library (optional, only for async usage)
pip install free-proxyWith async support (installs aiohttp):
pip install "free-proxy[async]"First import Free Proxy that way:
from fp.fp import FreeProxy| Parameter | Type | Example | Default value |
|---|---|---|---|
| country_id | list | ['US', 'BR'] | None |
| timeout | float > 0 | 0.1 | 0.5 |
| rand | bool | True | False |
| anonym | bool | True | False |
| elite | bool | True | False |
| bool,None | False | None | |
| https | bool | True | False |
| url | str | '' | google.com |
| request_timeout | float > 0 | 5 | 10 |
- No parameters Get the first working proxy from https://www.sslproxies.org/. If no proxies are working, try again pulling from https://free-proxy-list.net
proxy = FreeProxy().get()country_idparameter Get the first working proxy from a specified list of countries (from https://www.sslproxies.org/). If no proxies are working check all countries pulling from https://free-proxy-list.net.
proxy = FreeProxy(country_id=['US', 'BR']).get()country_idfor US and GB You can set the country_id to US or GB to get a proxy from the United States or the United Kingdom respectively. Proxies will be scrapped from https://www.us-proxy.org/ (US) or https://free-proxy-list.net/uk-proxy.html (GB). If there are no working proxies in the specified list check all countries
proxy = FreeProxy(country_id=['US']).get()
proxy = FreeProxy(country_id=['GB']).get()timeoutparameter Timeout is the parameter for checking if a proxy is valid. If the server does not respond in specified time, the script will mark the proxy as invalid. Defaulttimeout=0.5. You can change it by specifying a timeout eg.timeout=1.
proxy = FreeProxy(timeout=1).get()randparameter Shuffles the order of the proxy list from https://www.sslproxies.org/ instead of going from newest to oldest (as listed on the website). Defaults torand=False
proxy = FreeProxy(rand=True).get()anonymparameter Return only proxies marked as anonymous. Defaults toanonym=False
proxy = FreeProxy(anonym=True).get()eliteparameter Return only proxies marked as 'elite proxy'. Defaults toelite=False.
proxy = FreeProxy(elite=True).get()Please note: elite proxies are always anonymous. If you set elite=True, you will also be eliminating any non-anonymous proxies.
googleparameter IfTrueit will only return proxies marked as "google". IfFalse, it will not return proxies marked as "google". Defaults togoogle=None, which returns all proxies.
proxy = FreeProxy(google=True).get()-
httpsparameter IfTrueit will only return proxies marked as HTTPS. Defaults tohttps=False- i.e. HTTP proxy (for HTTP websites).Please note: HTTPS proxies work for both HTTP and HTTPS websites.
proxy = FreeProxy(https=True).get()You can combine parameters:
proxy = FreeProxy(country_id=['US', 'BR'], timeout=0.3, rand=True).get()If there are no working proxies with the provided parameters, the script will raise FreeProxyException with the message There are no working proxies at this time..
urlparameter The url parameter allows you to set a custom URL for testing purposes. If left empty, it defaults to 'https://www.google.com'.
Using default URL:
proxy = FreeProxy().get() Using custom URL, if test on different endpoint is needed:
proxy = FreeProxy(url='http://httpbin.org/get').get() request_timeoutparameter Number of seconds to wait when downloading the proxy list from the source websites (https://www.sslproxies.org/ etc.). If the website does not respond in that time, the script raisesFreeProxyExceptioninstead of hanging indefinitely. Defaults torequest_timeout=10. Not to be confused withtimeout, which is used for checking individual proxies.
proxy = FreeProxy(request_timeout=5).get()AsyncFreeProxy is an asyncio variant of FreeProxy. It accepts the same options,
but checks proxies concurrently (up to max_concurrent at a time, default 20)
and returns the first working one, which is usually much faster than the
synchronous version. Remaining checks are cancelled as soon as a winner is found.
Async support requires the async extra:
pip install "free-proxy[async]"In a plain script, run it with asyncio.run:
import asyncio
from fp.fp import AsyncFreeProxy
proxy = asyncio.run(AsyncFreeProxy().get())Inside your own async application (or in a Jupyter cell), just await it:
proxy = await AsyncFreeProxy(country_id=['US'], max_concurrent=50).get()max_concurrentparameter (AsyncFreeProxyonly) Maximum number of proxies checked at the same time. Defaults tomax_concurrent=20. Raise it for faster scanning on a strong connection, lower it to be gentler on your network and the test URL.
- Added
AsyncFreeProxy— an asyncio variant ofFreeProxythat checks proxies concurrently and returns the first working one (based on the idea from #39, thanks @NerdzzyDev) - Async support is an optional extra:
pip install "free-proxy[async]"(installs aiohttp) - Added
max_concurrentparameter toAsyncFreeProxy(default: 20) limiting how many proxies are checked at once - Raised minimum Python version to 3.9
- Fixed the proxy check silently bypassing the proxy when the test URL scheme did not match the
httpssetting. With default settings (HTTP proxy mapping + HTTPS test URL)requestsselected no proxy at all, the peername verification then rejected every candidate andget()always failed. The proxies mapping now covers bothhttpandhttpsschemes. Broken since 1.2.1. (#61) - Added a CI workflow running the test suite on Python 3.9–3.13
- Fixed
get_proxy_listhanging indefinitely when a source website stalls — the proxy list request now has a timeout (#58) - Added
request_timeoutparameter (default: 10 seconds) to control the proxy list download timeout
- Fixed proxy check failing due to a duplicated URL schema (
http://https://...), introduced in 1.1.3. This brokehttps=Trueand customurlusage (#52, #43).
- Updated lxml to version 6.1.1
- Updated requests to version 2.34.2
- Updated pip-chill to version 1.0.5
- Pinned minimum dependency versions in
install_requires(lxml>=5.0,<7,requests>=2.31,<3) - Raised minimum Python version to 3.8
- Added
urlparamameter
- Updated lxml to version 5.3.0
- Updated pip-chill to version 1.0.3
- Updated requests to version 2.32.3
- Fixed https parameter error
- Fixed additional loop issue when no proxy was found
- Added new website to get proxies from https://free-proxy-list.net
- Added new website to get proxies from https://free-proxy-list.net/uk-proxy.html
- Added new website to get proxies from https://www.us-proxy.org/
- Change lxml version to 4.9.1
- Added
googleparameter - Added
httpsparameter
- Added
eliteparameter - Add exception class and raise exception instead of system exit
- Change lxml version to 4.6.5
- Fix proxy list default length
- Change XPatch due to SSL proxies page update
- Change lxml version
- Added
anonymparameter
- Fix typos in readme
- Fix urrlib3 exception
urllib3.exceptions.ProxySchemeUnknown: Not supported proxy scheme None, - Fix imports
- Initial release
The authors of this repository are not responsible for any consequences, damages or losses arising from the use or misuse of this repository or content. Users are solely responsible for their actions and any consequences that may follow.
Free Software!