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!