curl → python · requests · headers · body · auth · live

Convert cURL to Python

Turn any cURL command into a Python requests call. Headers, JSON or form bodies and basic auth all carry across. Runs locally in your browser.

cURL → Python (requests)
Input
161 B
4 lines
Output
262 B
10 lines
Status
ready
live
Ratio
1.63×
out/in
input · curl command
output · python (requests)
import requests

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer abc123"
}
payload = {"name":"Alice","role":"admin"}

response = requests.post("https://api.example.com/users", headers=headers, json=payload)
print(response.json())
Quick Start

How to port cURL to Python (requests)

The cURL parser pulls URL, method, headers, body and auth into a structured shape. The Python generator emits a requests call with idiomatic kwargs: json= for JSON bodies, data= for raw bodies, auth= for basic auth.

  1. 01

    Paste cURL

    From DevTools, Postman, an SDK doc — anything that emits a cURL command.

    Parsing is strict-but-tolerant — comments and trailing commas are accepted on input where the source format historically permits them; output stays canonical.

    inputstricttolerantliveparse
    in · sourcecurl · live
    curl -X POST https://api.example.com
    loaded · parsedtarget · ready
  2. 02

    Parser pulls fields

    URL, method, headers, body and basic auth are extracted into a structured shape.

    Conversion preserves type information where the target supports it (numbers stay numeric, booleans stay boolean) so the destination parser never has to re-coerce.

    parsetype-preservinglosslesslivememoised
    url · optionsheaders · live
    { url, method, headers, data }
    options applied · liveround-trip
  3. 03

    Emit Python (requests)

    The generator turns the parsed command into idiomatic code for the target stack.

    Re-encoding is idempotent: running output back through the same converter produces the same bytes, which keeps round-trips git-friendly.

    genidempotentround-tripdiff-cleandeterministic
    out · convertedPython (requests) · ready
    requests.post(url, json=payload)
    converted · livediff-clean
  4. 04

    Copy or download

    Drop into your project and tweak as needed.

    Copy writes via navigator.clipboard.writeText; downloads use the target’s native MIME so editors apply the right syntax highlighting on open.

    exportclipboardtarget MIMEblobclient-side
    ✓ · copiedready · done
    ✓ Copied
    shipped · ready to shipsuccess
Pro tips

Converting between formats, safely

Pick the strictest source format

Lossy formats hide bugs. Choose JSON or YAML as your source-of-truth, convert downstream as needed.

Round-trip in CI

If your converter is idempotent, your CI can verify A → B → A equals the original. Catches subtle data loss.

Numbers vs strings differ

YAML/TOML have a number type; CSV doesn’t. Quote IDs in CSV to keep leading-zero values intact.

Watch character encoding

Source format may be Latin-1 / Windows-1252; target should be UTF-8. Convert encoding before structure.

Preserve comments where you can

YAML and TOML support comments. Don’t silently drop them — they often encode intent.

Schema-aware beats blind

Use a schema to guide conversion. Field types, required-ness, and defaults survive better with structure.

Use Cases

When to port cURL to Python (requests)

Migration, polyglot teams, integration tests.

Backend SDKs

Bootstrap a Python client from API documentation snippets. Type information survives: numbers stay numeric, booleans stay boolean, strings stay strings. The destination parser doesn't have to re-coerce, which avoids the "'true' becomes "true"" bug class.

round-trip safe

Data engineering

Move a curl pipeline into an Airflow / Prefect task. Run output back through the inverse converter to verify idempotent round-trips in CI. A → B → A should produce byte-identical input — if it doesn't, you've found data loss.

type-preserving

Scripting

Spin up a quick CLI tool from the curl repro. Comments and metadata survive where the target format supports them (YAML, TOML, HCL). The tool doesn't silently drop intent-encoded annotations, which keeps your config self-documenting.

schema-aware

Testing

Port a curl example to a pytest fixture. Pair with a schema (JSON Schema, OpenAPI, Zod, Pydantic) to catch shape drift on either side. Catch breaking changes at conversion time rather than at runtime in production.

lossless

Notebooks

Paste straight into a Jupyter cell for exploration. Output respects target-format conventions: quoting in CSV, indent in YAML, brackets in JSON. Existing parsers don't need patches, and the result drops into legacy pipelines unchanged.

diff-clean

Polyglot teams

Hand a curl off to the Python team in their language. Encoding-aware: handles UTF-8 vs UTF-16 vs Latin-1 / Windows-1252 transparently. The character-set surprise that breaks "works on my machine" doesn't apply here.

spec-grade
FAQ

Frequently asked questions

requests — the de facto HTTP library in Python. Async users can adapt the snippet to httpx with minor changes.
Yes — curl's -u user:pass is rendered as auth=(user, pass) on the requests call.
JSON bodies emit as json=payload so requests applies the right Content-Type automatically.
Basic --data is supported. For -F multipart, swap to files= and form= manually after pasting.
No. Parsing and code generation run locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!