Skip to main content

libcurl ffi bindings for Python, with impersonation support

Project description

curl_cffi

Python binding for curl-impersonate via cffi.

Documentation | 中文 README

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 asyncio with 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

curl_cffi-0.5.9.tar.gz (32.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

curl_cffi-0.5.9-cp37-abi3-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.7+Windows x86-64

curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ ARM64

curl_cffi-0.5.9-cp37-abi3-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

curl_cffi-0.5.9-cp37-abi3-macosx_10_9_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.7+macOS 10.9+ x86-64

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

Hashes for curl_cffi-0.5.9.tar.gz
Algorithm Hash digest
SHA256 996aa7afd0610d459c23a0529709213319b18ae44df910a010aa56673f103a25
MD5 7a87b70c72bf82673c7c97f0de56a4a4
BLAKE2b-256 ae6d73a5e6eb068b921d0a84545cf82385c761318fec372a246c7201712035da

See more details on using hashes here.

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

Hashes for curl_cffi-0.5.9-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 19e43c507b61f368554ece6801bdb4bb1505e35cb1110fcd2c273f8f4e319637
MD5 a0241ae82f89c4f3be8e540dc399a9c1
BLAKE2b-256 1b447e2b3e34e12e76d2109dc4cfc182908a078d24f2dd1a339d57e0d5a64906

See more details on using hashes here.

File details

Details for the file curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 035387477b9c6a0861c1479b077422aeb68ac827f273f05c69cdaa91faad947e
MD5 eac557f0b07a62d79cce2b08ab48eeb3
BLAKE2b-256 d4196284b4353d8e04dbe26cddd03a575fa531e4bf2a3f5a44f148dc7af12307

See more details on using hashes here.

File details

Details for the file curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for curl_cffi-0.5.9-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 13b218d8e195c0337e6ee7f700c7074efa61bdfeca32276cc159b9a4369280fb
MD5 9338da88d60d9f6c89e01ac6f424fd53
BLAKE2b-256 d6a49f09f7e8c6e5f5424422361916d22977e2b96148b6e2535f58235173d516

See more details on using hashes here.

File details

Details for the file curl_cffi-0.5.9-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for curl_cffi-0.5.9-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c10f8fa27b8dda733534a3baae307db8fd6344cb5166b6dfe359eb62e0b73c6
MD5 8ff36e732a35201e40d20d331f527faa
BLAKE2b-256 e86353e97f20998f428d82587785eefcac4190f1a5271276a5a9ee148667457a

See more details on using hashes here.

File details

Details for the file curl_cffi-0.5.9-cp37-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for curl_cffi-0.5.9-cp37-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f94a02d6a2e00ffd1044ac0727285e5e12f69bef97324640f7fc0bffc2fd7aa9
MD5 edf8adeeee90ea02ac7bf48bfd73f84f
BLAKE2b-256 721fe65dd85f0426446e2b24fadd03c39220103f50b40780f61ee01379272bd0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page