Skip to content

The HttpClientToCurl is a NuGet package for generating curl script of HttpClient in .NET ( C# | CSharp | Dotnet ) supported features: Post, Get, Put, and Delete. content types: application/json, text/xml, application/x-www-form-urlencoded

License

Notifications You must be signed in to change notification settings

amingolmahalle/HttpClientToCurlGenerator

Repository files navigation

πŸ₯‡ HttpClientToCurl

Generate curl commands directly from your HttpClient or HttpRequestMessage in .NET β€” perfect for debugging, logging, and sharing HTTP requests.


πŸ“Š Badges

license stars NuGet Version NuGet Downloads Build


πŸ“– Overview

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:


🧰 1. Manual Mode

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.


🧩 2. Automatic Mode

Automatically generates curl output whenever your app sends a request.
You can configure it through dependency injection:

  • Global Registration β€” enable for all HttpClient instances created via IHttpClientFactory
  • Per-Client Registration β€” enable only for selected clients

Best for:
Logging, monitoring, or tracing outgoing requests across the application.


πŸ’‘ Why Use HttpClientToCurl?

  • πŸ§ͺ 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

βš™οΈ Installation

dotnet add package HttpClientToCurl

Or visit the NuGet page here: HttpClientToCurl

πŸ“š Documentation

For full examples, detailed usage, and advanced configuration options, please see the Wiki:

πŸ‘‰ Open Wiki β†’ More Details


πŸš€ Quick Start

🧰 Manual Mode Usage Example

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}'

🧩 Automatic Mode Usage Example

1️⃣ Global Registration

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
  }
}

2️⃣ Per-Client Registration

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)


🧩 Features

Feature Description
πŸ” Methods Supports GET, POST, PUT, PATCH, DELETE
🧠 Content Types JSON, XML, FormUrlEncodedContent
πŸ’Ύ Output Console β€’ File β€’ String
🎨 Beautified Output Optional pretty printing

πŸ“š Articles

πŸ’‘ Contribute

Found a bug or want to improve this project? Open an issue or submit a pull request.

πŸ“§ Contact: amin.golmahalle@gmail.com

⭐ Give a Star

If you find this project helpful, please give it a ⭐ β€” it helps others discover it too!

πŸ™Œ Contributors

About

The HttpClientToCurl is a NuGet package for generating curl script of HttpClient in .NET ( C# | CSharp | Dotnet ) supported features: Post, Get, Put, and Delete. content types: application/json, text/xml, application/x-www-form-urlencoded

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7