HTTPie to cURL Converter
Convert a supported HTTPie command into a POSIX cURL snippet
Supports absolute HTTP(S) URLs, methods, headers, query parameters, flat JSON fields, text forms, --raw and Basic auth. Defaults to GET without data and POST with a body.
The command appears after conversion.
Uses the HTTPie 3.2.4 subset without stdin and emits POSIX shell syntax. Files, nested fields, sessions, shell expansion and unknown options are rejected. Redirect following supports only GET without a body. Client defaults such as User-Agent are not copied individually.
Processed in your browser; commands are not executed, requests are not sent and command drafts are not stored. Copied output may contain credentials.
The full guide also includes pitfalls, worked examples, snippets, FAQs, and related tools for checking results or troubleshooting.
About this tool
HTTPie to cURL converts a defined HTTPie 3.2.4 subset into a POSIX shell snippet. It supports absolute HTTP(S) URLs, methods, ordered headers and query pairs, flat JSON fields with typed JSON values, URL-encoded text forms, raw bodies and ASCII Basic authentication. Ordinary data fields default to POST with JSON; --form uses URL encoding for text fields. Invalid typed JSON, precision-losing numbers and unsupported syntax are reported instead of silently rewritten. File uploads, nested field names, stdin, sessions and shell expansion are not converted. Redirect following is limited to GET without a body. The tool neither executes commands nor sends requests, and does not store command drafts.
Production Snippets
JSON strings and typed values share one body
text
http https://api.example.com/users name=Alice active:=true
Method: POST
Content-Type: application/json
Body: {"name":"Alice","active":true}
Use --form for URL-encoded text fields. A field such as [email protected] is outside this converter’s supported subset.Frequently Asked Questions
Why does name=Alice produce POST JSON?
HTTPie defaults to POST when data is present and GET otherwise. Ordinary = fields are JSON strings unless --form is selected; := supplies a JSON value.
Which options are supported?
The subset accepts --json/-j, --form/-f, --raw, --auth/-a with an ASCII username:password pair, --verify=yes/no and --follow/-F for GET without a body. Unknown options are rejected.
Are duplicate and empty values preserved?
Repeated query pairs and headers keep their order. Duplicate JSON keys use the last value. An empty string field stays empty; Header: removes a default header and quoted Header; sends an empty value.
Can it convert uploads, nested fields or shell pipelines?
No. File references, multipart uploads, nested field names, stdin, sessions, environment expansion, pipelines and redirection are rejected. Typed JSON values may contain arrays or objects.
Will the request be identical on every client?
The supported request fields are translated, but defaults such as User-Agent and transport behavior may differ. Review the output before running it; it is POSIX shell syntax, not PowerShell or cmd syntax.
Are commands executed or saved?
No commands or requests are executed. Input drafts are not stored, and the old saved-command key is removed when the tool mounts. Copied output can contain credentials.
Keep browsing