Skip to main content

Official Python SDK for the NSLSolver captcha solving API

Project description

NSLSolver Python SDK

Python SDK for the NSLSolver captcha solving API.

Installation

pip install nslsolver

# async support
pip install nslsolver[async]

Quick Start

from nslsolver import NSLSolver

solver = NSLSolver("your-api-key")

# Turnstile
result = solver.solve_turnstile(
    site_key="0x4AAAAAAAB...",
    url="https://example.com",
)
print(result.token)

# Cloudflare challenge (proxy required)
result = solver.solve_challenge(
    url="https://example.com/protected",
    proxy="http://user:pass@host:port",
)
print(result.cookies, result.user_agent)

# Balance
balance = solver.get_balance()
print(balance.balance, balance.max_threads, balance.allowed_types)

Async

import asyncio
from nslsolver import AsyncNSLSolver

async def main():
    async with AsyncNSLSolver("your-api-key") as solver:
        result = await solver.solve_turnstile(
            site_key="0x4AAAAAAAB...",
            url="https://example.com",
        )
        print(result.token)

asyncio.run(main())

Error Handling

from nslsolver import (
    NSLSolver,
    AuthenticationError,
    InsufficientBalanceError,
    RateLimitError,
    SolveError,
    NSLSolverError,
)

solver = NSLSolver("your-api-key")

try:
    result = solver.solve_turnstile(
        site_key="0x4AAAAAAAB...",
        url="https://example.com",
    )
except AuthenticationError:
    print("Bad API key.")
except InsufficientBalanceError:
    print("Top up your balance.")
except RateLimitError:
    print("Rate limited after all retries.")
except SolveError as e:
    print(f"Solve failed: {e.message}")
except NSLSolverError as e:
    print(f"API error (HTTP {e.status_code}): {e.message}")

Rate-limit (429) and backend (503) errors are retried automatically with exponential backoff before raising.

Configuration

solver = NSLSolver(
    api_key="your-api-key",
    base_url="https://api.nslsolver.com",  # default
    timeout=120,       # seconds (default: 120)
    max_retries=3,     # retries for 429/503 (default: 3)
)

Both clients support context managers (with / async with) for session cleanup.

Requirements

  • Python 3.8+
  • requests (sync client)
  • aiohttp (async client, optional)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nslsolver-1.0.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

nslsolver-1.0.0-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file nslsolver-1.0.0.tar.gz.

File metadata

  • Download URL: nslsolver-1.0.0.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for nslsolver-1.0.0.tar.gz
Algorithm Hash digest
SHA256 13d78b144c6c4d88fb45e579ee239846fde423c6ac7e0922dad4927e905859ec
MD5 7b0cc9dde30b6efe569b110edfdb69d5
BLAKE2b-256 8e517570be77df3c1d8a6ce9f15b9f0483e5ea5b2f0c20eaf466d4dce1e7597f

See more details on using hashes here.

File details

Details for the file nslsolver-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: nslsolver-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for nslsolver-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a6a1a3213e9dc00cbcf636786b2451bad687e69265bfe27190877f3a7c160ac
MD5 a44e68dfae96d278508dfec79852cddf
BLAKE2b-256 8274cd3196e80655829320a169f8732711e43c429dbd8d65854ba4e85a8d2d27

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