Skip to content


MIT 744 14 104,548
217.0 million (month) Aug 29 2014 1.7.2(a month ago)
1,603 2 28 MIT
Feb 23 2022 282.6 thousand (month) 0.6.4(a month ago)

axios is a popular JavaScript library that allows you to make HTTP requests from a Node.js environment. It is a promise-based library that works in both the browser and Node.js. It is similar to the Fetch API, but with a more powerful feature set and better browser compatibility.

One of the main benefits of using axios is that it automatically transforms the response data into a JSON object, making it easy to work with.

Axios is known for user-friendly API and support for asynchronous async/await syntax making it very accessible in web scraping.

Curl-cffi is a Python library for implementing curl-impersonate which is a HTTP client that appears as one of popular web browsers like: - Google Chrome - Microsoft Edge - Safari - Firefox Unlike requests and httpx which are native Python libraries, curl-cffi uses cURL and inherits it's powerful features like extensive HTTP protocol support and detection patches for TLS and HTTP fingerprinting.

Using curl-cffi web scrapers can bypass TLS and HTTP fingerprinting.



Example Use

// axios can be used with promises:
  .then(response => {
  .catch(error => {

// or async await syntax:
var resp = await axios.get('');

// to make requests concurrently Promise.all function can be used:
const results = await Promise.all([

// axios also supports other type of requests like POST and even automatically serialize them:
await'', {'query': 'hello world'});
// or formdata
const data = {name: 'John Doe', email: ''};

        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'

// default values like headers can be configured globally
axios.defaults.headers.common['User-Agent'] = '';
// or for session instance:
const instance = axios.create({
  headers: {"User-Agent": ""},
curl-cffi can be accessed as low-level curl client as well as an easy high-level HTTP client:
from curl_cffi import requests

response = requests.get('')

# or using sessions
session = requests.Session()
response = session.get('')

# also supports async requests using asyncio
import asyncio
from curl_cffi.requests import AsyncSession

urls = [

async with AsyncSession() as s:
    tasks = []
    for url in urls:
        task = s.get(url)
    # scrape concurrently:
    responses = await asyncio.gather(*tasks)

# also supports websocket connections
from curl_cffi.requests import Session, WebSocket

def on_message(ws: WebSocket, message):

with Session() as s:
    ws = s.ws_connect(

Alternatives / Similar

Was this page helpful?