Skip to main content

Python SDK for the Space Router residential proxy network

Project description

SpaceRouter Python SDK

Python SDK for routing HTTP requests through the Space Router residential proxy network.

Installation

pip install spacerouter

# With SOCKS5 support
pip install spacerouter[socks]

Quick Start

from spacerouter import SpaceRouter

with SpaceRouter("sr_live_YOUR_API_KEY", gateway_url="http://gateway:8080") as client:
    response = client.get("https://httpbin.org/ip")
    print(response.json())       # {"origin": "residential-ip"}
    print(response.node_id)      # node that handled the request
    print(response.request_id)   # unique request ID for tracing

Async Usage

from spacerouter import AsyncSpaceRouter

async with AsyncSpaceRouter("sr_live_YOUR_API_KEY") as client:
    response = await client.get("https://httpbin.org/ip")
    print(response.json())

Region Targeting

Route requests through specific geographic regions:

# Target residential IPs in the US
client = SpaceRouter("sr_live_xxx", region="US")

# Target residential IPs in South Korea
client = SpaceRouter("sr_live_xxx", region="KR")

# Change routing on the fly
jp_client = client.with_routing(region="JP")

SOCKS5 Proxy

client = SpaceRouter(
    "sr_live_xxx",
    protocol="socks5",
    gateway_url="socks5://gateway:1080",
)
response = client.get("https://httpbin.org/ip")

Requires the socks extra: pip install spacerouter[socks]

API Key Management

from spacerouter import SpaceRouterAdmin

with SpaceRouterAdmin("http://localhost:8000") as admin:
    # Create a key (raw value only available here)
    key = admin.create_api_key("my-agent", rate_limit_rpm=120)
    print(key.api_key)  # sr_live_...

    # List keys
    for k in admin.list_api_keys():
        print(k.name, k.key_prefix, k.is_active)

    # Revoke a key
    admin.revoke_api_key(key.id)

Async variant: AsyncSpaceRouterAdmin

Error Handling

from spacerouter import SpaceRouter
from spacerouter.exceptions import (
    AuthenticationError,   # 407 - invalid API key
    RateLimitError,        # 429 - rate limit exceeded
    NoNodesAvailableError, # 503 - no residential nodes online
    UpstreamError,         # 502 - target unreachable via node
)

with SpaceRouter("sr_live_xxx") as client:
    try:
        response = client.get("https://example.com")
    except RateLimitError as e:
        print(f"Rate limited, retry after {e.retry_after}s")
    except NoNodesAvailableError:
        print("No nodes available, try again later")
    except UpstreamError as e:
        print(f"Node {e.node_id} could not reach target")
    except AuthenticationError:
        print("Check your API key")

Note: HTTP errors from the target website (e.g. 404, 500) are not raised as exceptions. Only proxy-layer errors produce exceptions.

Configuration

Parameter Default Description
api_key (required) API key (sr_live_...)
gateway_url http://localhost:8080 Proxy gateway URL
protocol http http or socks5
region None 2-letter country code (ISO 3166-1 alpha-2)
timeout 30.0 Request timeout in seconds

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

spacerouter-0.3.0b1.tar.gz (26.6 kB view details)

Uploaded Source

Built Distribution

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

spacerouter-0.3.0b1-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

Details for the file spacerouter-0.3.0b1.tar.gz.

File metadata

  • Download URL: spacerouter-0.3.0b1.tar.gz
  • Upload date:
  • Size: 26.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for spacerouter-0.3.0b1.tar.gz
Algorithm Hash digest
SHA256 8d0dda1d91844d2d9a6b0cc534ed919231fc7ddf586c73623cd72fa8b42e1cf4
MD5 4c3edf6e5a7e4670fd89e2f893a1c293
BLAKE2b-256 26eb4b0a612c14c66be6bdafb87d49be168e98dc08ba92734e32479b560ff82f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spacerouter-0.3.0b1.tar.gz:

Publisher: publish.yml on space-labs/space-router-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spacerouter-0.3.0b1-py3-none-any.whl.

File metadata

  • Download URL: spacerouter-0.3.0b1-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for spacerouter-0.3.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 be19a46632db249a1b9218687bdb599c009bd68e9f9c76e686650beac2d9257c
MD5 4cda27934cd2ec0528ce4774d676334b
BLAKE2b-256 e7a70396edc1fab07ad397c50d850b5cc42efd4163898c979303cb4e9d1e630f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spacerouter-0.3.0b1-py3-none-any.whl:

Publisher: publish.yml on space-labs/space-router-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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