Generate curl commands directly from your HttpClient or HttpRequestMessage in .NET β perfect for debugging, logging, and sharing HTTP requests.
HttpClientToCurl is a lightweight and powerful .NET extension library that turns your HTTP requests into curl commands. It works with both HttpClient and HttpRequestMessage, giving you two simple ways to generate curl commands:
Generate curl commands on demand using extension methods on either HttpClient or HttpRequestMessage.
Best for:
Debugging individual requests, creating reproducible Postman calls, or sharing API examples.
Automatically generates curl output whenever your app sends a request.
You can configure it through dependency injection:
- Global Registration β enable for all
HttpClientinstances created viaIHttpClientFactory - Per-Client Registration β enable only for selected clients
Best for:
Logging, monitoring, or tracing outgoing requests across the application.
- π§ͺ Instantly visualize and debug request payloads or headers
- π€ Share exact API calls with teammates or QA engineers
- βοΈ Simplify Postman and CLI reproduction
- πͺΆ Lightweight, dependency-free, and easy to integrate
dotnet add package HttpClientToCurlOr visit the NuGet page here: HttpClientToCurl
For full examples, detailed usage, and advanced configuration options, please see the Wiki:
π Open Wiki β More Details
using System.Text; using HttpClientToCurl; class Program { static async Task Main() { var baseAddress = new Uri("http://localhost:1213/v1/"); var requestUri = "api/test"; using var httpClientInstance = new HttpClient { BaseAddress = baseAddress }; string requestBody = @"{""name"":""sara"",""requestId"":10001001,""amount"":20000}"; var httpRequestMessageInstance = new HttpRequestMessage(HttpMethod.Post, requestUri) { Content = new StringContent(requestBody, Encoding.UTF8, "application/json") }; httpRequestMessageInstance.Headers.Add("Authorization", "Bearer YourAccessToken"); // Option 1: Generate curl from HttpClient httpClientInstance.GenerateCurlInConsole(httpRequestMessageInstance); // Option 2: Generate curl from HttpRequestMessage httpRequestMessageInstance.GenerateCurlInConsole(baseAddress); await httpClientInstance.SendAsync(httpRequestMessageInstance); } }β Example Output
curl -X POST 'http://localhost:1213/v1/api/test' \ -H 'Authorization: Bearer YourAccessToken' \ -H 'Content-Type: application/json; charset=utf-8' \ -d '{"name":"sara","requestId":10001001,"amount":20000}'Enable curl generation globally β every HttpClient created through IHttpClientFactory will automatically log curl commands.
Program.cs / Startup.cs
using HttpClientToCurl; // Register global curl generation builder.Services.AddHttpClientToCurlInGeneralMode(builder.Configuration); // Register default HttpClient (now curl-enabled) builder.Services.AddHttpClient();appsettings.json
"HttpClientToCurl": { "TurnOnAll": true, // Master switch: enable or disable the entire HttpClientToCURL logging system "ShowOnConsole": { "TurnOn": true, // Enable console output for generated curl commands "NeedAddDefaultHeaders": true, // Include default headers (like User-Agent, Accept, etc.) in the curl output "EnableCompression": false, // Compress the console log output (not recommended for debugging readability) "EnableCodeBeautification": true // Beautify and format the curl command for better readability }, "SaveToFile": { "TurnOn": true, // Enable saving the generated curl commands into a file "NeedAddDefaultHeaders": true, // Include default headers (like User-Agent, Accept, etc.) in the curl output "EnableCompression": false, // Compress the saved file (useful if logging a large number of requests) "Filename": "curl_commands", // Name of the output file without extension (e.g., will produce curl_commands.log) "Path": "C:\\Users\\Public" // Directory path where the log file will be created } }Enable curl logging for specific named clients only.
Program.cs / Startup.cs
using HttpClientToCurl; // Register the curl generator once builder.Services.AddHttpClientToCurl(builder.Configuration); // Enable curl logging for selected clients builder.Services.AddHttpClient("my-client1", showCurl: true);appsettings.json (same configuration options as above)
| Feature | Description |
|---|---|
| π Methods | Supports GET, POST, PUT, PATCH, DELETE |
| π§ Content Types | JSON, XML, FormUrlEncodedContent |
| πΎ Output | Console β’ File β’ String |
| π¨ Beautified Output | Optional pretty printing |
- How to Generate curl Script of the HttpClient in .NET
- New Feature in HttpClientToCurl for .NET: Debugging HttpRequestMessage Made Easy
Found a bug or want to improve this project? Open an issue or submit a pull request.
π§ Contact: amin.golmahalle@gmail.com
If you find this project helpful, please give it a β β it helps others discover it too!