libcurl ffi bindings for Python, with impersonation support
Project description
curl_cffi
Python binding for curl-impersonate via cffi.
Unlike other pure python http clients like httpx or requests, curl_cffi can
impersonate browsers' TLS signatures or JA3 fingerprints. If you are blocked by some
website for no obvious reason, you can give this package a try.
Features
- Supports JA3/TLS and http2 fingerprints impersonation.
- Much faster than requests/httpx/tls_client, on par with aiohttp/pycurl, see benchmarks.
- Mimics requests API, no need to learn another one.
- Pre-compiled, so you don't have to compile on your machine.
- Supports
asynciowith proxy rotation on each request. - Supports http 2.0, which requests does not.
Install
pip install curl_cffi --upgrade
This should work on Linux(x86_64/aarch64), macOS(Intel/Apple Silicon) and Windows(amd64).
If it does not work on you platform, you may need to compile and install curl-impersonate
first and set some environment variables like LD_LIBRARY_PATH.
To install beta releases:
pip install curl_cffi --pre
Usage
requests-like
from curl_cffi import requests
# Notice the impersonate parameter
r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome110")
print(r.json())
# output: {..., "ja3n_hash": "aa56c057ad164ec4fdcb7a5a283be9fc", ...}
# the js3n fingerprint should be the same as target browser
# http/socks proxies are supported
proxies = {"https": "http://localhost:3128"}
r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome110", proxies=proxies)
proxies = {"https": "socks://localhost:3128"}
r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome110", proxies=proxies)
Sessions
# sessions are supported
s = requests.Session()
# httpbin is a http test website
s.get("https://httpbin.org/cookies/set/foo/bar")
print(s.cookies)
# <Cookies[<Cookie foo=bar for httpbin.org />]>
r = s.get("https://httpbin.org/cookies")
print(r.json())
# {'cookies': {'foo': 'bar'}}
Supported impersonate versions, as supported by curl-impersonate:
- chrome99
- chrome100
- chrome101
- chrome104
- chrome107
- chrome110
- chrome99_android
- edge99
- edge101
- safari15_3
- safari15_5
asyncio
from curl_cffi.requests import AsyncSession
async with AsyncSession() as s:
r = await s.get("https://example.com")
More concurrency:
import asyncio
from curl_cffi.requests import AsyncSession
urls = [
"https://googel.com/",
"https://facebook.com/",
"https://twitter.com/",
]
async with AsyncSession() as s:
tasks = []
for url in urls:
task = s.get("https://example.com")
tasks.append(task)
results = await asyncio.gather(*tasks)
curl-like
Alternatively, you can use the low-level curl-like API:
from curl_cffi import Curl, CurlOpt
from io import BytesIO
buffer = BytesIO()
c = Curl()
c.setopt(CurlOpt.URL, b'https://tls.browserleaks.com/json')
c.setopt(CurlOpt.WRITEDATA, buffer)
c.impersonate("chrome110")
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode())
See the docs for more details.
Acknowledgement
- Originally forked from multippt/python_curl_cffi, which is under the MIT license.
- Headers/Cookies files are copied from httpx, which is under the BSD license.
- Asyncio support is inspired by Tornado's curl http client.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file curl_cffi-0.5.9.tar.gz.
File metadata
- Download URL: curl_cffi-0.5.9.tar.gz
- Upload date:
- Size: 32.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
996aa7afd0610d459c23a0529709213319b18ae44df910a010aa56673f103a25
|
|
| MD5 |
7a87b70c72bf82673c7c97f0de56a4a4
|
|
| BLAKE2b-256 |
ae6d73a5e6eb068b921d0a84545cf82385c761318fec372a246c7201712035da
|
File details
Details for the file curl_cffi-0.5.9-cp37-abi3-win_amd64.whl.
File metadata
- Download URL: curl_cffi-0.5.9-cp37-abi3-win_amd64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.7+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19e43c507b61f368554ece6801bdb4bb1505e35cb1110fcd2c273f8f4e319637
|
|
| MD5 |
a0241ae82f89c4f3be8e540dc399a9c1
|
|
| BLAKE2b-256 |
1b447e2b3e34e12e76d2109dc4cfc182908a078d24f2dd1a339d57e0d5a64906
|
File details
Details for the file curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 7.2 MB
- Tags: CPython 3.7+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
035387477b9c6a0861c1479b077422aeb68ac827f273f05c69cdaa91faad947e
|
|
| MD5 |
eac557f0b07a62d79cce2b08ab48eeb3
|
|
| BLAKE2b-256 |
d4196284b4353d8e04dbe26cddd03a575fa531e4bf2a3f5a44f148dc7af12307
|
File details
Details for the file curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 6.9 MB
- Tags: CPython 3.7+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13b218d8e195c0337e6ee7f700c7074efa61bdfeca32276cc159b9a4369280fb
|
|
| MD5 |
9338da88d60d9f6c89e01ac6f424fd53
|
|
| BLAKE2b-256 |
d6a49f09f7e8c6e5f5424422361916d22977e2b96148b6e2535f58235173d516
|
File details
Details for the file curl_cffi-0.5.9-cp37-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: curl_cffi-0.5.9-cp37-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.7+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c10f8fa27b8dda733534a3baae307db8fd6344cb5166b6dfe359eb62e0b73c6
|
|
| MD5 |
8ff36e732a35201e40d20d331f527faa
|
|
| BLAKE2b-256 |
e86353e97f20998f428d82587785eefcac4190f1a5271276a5a9ee148667457a
|
File details
Details for the file curl_cffi-0.5.9-cp37-abi3-macosx_10_9_x86_64.whl.
File metadata
- Download URL: curl_cffi-0.5.9-cp37-abi3-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.7+, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f94a02d6a2e00ffd1044ac0727285e5e12f69bef97324640f7fc0bffc2fd7aa9
|
|
| MD5 |
edf8adeeee90ea02ac7bf48bfd73f84f
|
|
| BLAKE2b-256 |
721fe65dd85f0426446e2b24fadd03c39220103f50b40780f61ee01379272bd0
|