Skip to main content

Capture outgoing HTTP requests and inspect them in a local web dashboard

Project description

Smello

Capture outgoing HTTP requests from your Python code and browse them in a local web dashboard — including gRPC calls made by Google Cloud libraries.

Like Mailpit, but for HTTP requests.

Setup

Install the client SDK and the server:

pip install smello smello-server

Start the server:

smello-server run

Add two lines to your code:

import smello
smello.init()

import requests
resp = requests.get("https://api.stripe.com/v1/charges")

# Browse captured requests at http://localhost:5110

Smello monkey-patches requests, httpx, and grpc to capture all outgoing traffic. Browse results at http://localhost:5110.

Google Cloud libraries

Many Google Cloud Python libraries — BigQuery, Firestore, Pub/Sub, Analytics Data API (GA4), Vertex AI, Speech-to-Text, Vision, Translation, and others — use gRPC under the hood. Smello captures these calls automatically:

import smello
smello.init()

from google.cloud import bigquery
client = bigquery.Client()
rows = client.query("SELECT 1").result()

# gRPC calls to bigquery.googleapis.com appear at http://localhost:5110

Any library that calls grpc.secure_channel() or grpc.insecure_channel() is automatically captured.

What Smello Captures

  • Method, URL, headers, and body
  • Response status code, headers, and body
  • Duration in milliseconds
  • Library used (requests, httpx, or grpc)

Smello redacts sensitive headers (Authorization, X-Api-Key) by default.

Configuration

smello.init(
    server_url="http://localhost:5110",  # where to send captured data
    capture_hosts=["api.stripe.com"],    # only capture these hosts
    capture_all=True,                     # capture everything (default)
    ignore_hosts=["localhost"],          # skip these hosts
    redact_headers=["Authorization"],    # replace values with [REDACTED]
    enabled=True,                         # kill switch
)

All parameters fall back to SMELLO_* environment variables when not passed explicitly:

Parameter Env variable Default
enabled SMELLO_ENABLED True
server_url SMELLO_URL http://localhost:5110
capture_all SMELLO_CAPTURE_ALL True
capture_hosts SMELLO_CAPTURE_HOSTS []
ignore_hosts SMELLO_IGNORE_HOSTS []
redact_headers SMELLO_REDACT_HEADERS ["Authorization", "X-Api-Key"]

Boolean env vars accept true/1/yes and false/0/no (case-insensitive). List env vars are comma-separated.

Supported Libraries

  • requests — patches Session.send()
  • httpx — patches Client.send() and AsyncClient.send()
  • grpc — patches insecure_channel() and secure_channel() to intercept unary-unary calls

Requires

Links

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

smello-0.3.1.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

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

smello-0.3.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file smello-0.3.1.tar.gz.

File metadata

  • Download URL: smello-0.3.1.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smello-0.3.1.tar.gz
Algorithm Hash digest
SHA256 8cc5fcf794e5d00875cc67fd13a08f179af9e8a0e9a1a068962b58d329051079
MD5 b34f5e09e6f9c037f8e5d155838e5cc0
BLAKE2b-256 d8026bb3f8cdccf0032e60f4ef8bb320f516292ec0dad8d759afe1f033fc3ddd

See more details on using hashes here.

Provenance

The following attestation bundles were made for smello-0.3.1.tar.gz:

Publisher: publish-client.yml on smelloscope/smello

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

File details

Details for the file smello-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: smello-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smello-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c93a666dd7ec26da4f79f16e878aa38ea8666f89299bb85d2d18ac717ddf5837
MD5 aeefb77bbb7f57e4d0247cb8679660cc
BLAKE2b-256 a481992f3ae4dd981e5f6a989cde787fb5d25e0ab32f74359bf31e8706fb26e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for smello-0.3.1-py3-none-any.whl:

Publisher: publish-client.yml on smelloscope/smello

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