FireflyHttp 2.2.0

dotnet add package FireflyHttp --version 2.2.0
                    
NuGet\Install-Package FireflyHttp -Version 2.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FireflyHttp" Version="2.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FireflyHttp" Version="2.2.0" />
                    
Directory.Packages.props
<PackageReference Include="FireflyHttp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FireflyHttp --version 2.2.0
                    
#r "nuget: FireflyHttp, 2.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FireflyHttp@2.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FireflyHttp&version=2.2.0
                    
Install as a Cake Addin
#tool nuget:?package=FireflyHttp&version=2.2.0
                    
Install as a Cake Tool

📦 Package Name

FireflyHttp

FireflyHttp is a lightweight and easy-to-use C# HTTP request library inspired by Python's requests. It simplifies HTTP calls with minimal configuration and supports JSON and XML requests.

Installation

Install via NuGet:

dotnet add package FireflyHttp

How to use

using FireflyHttp;

GET Request

var response = await Firefly.Get("https://httpbin.org/get");
Console.WriteLine(response);

GET Request with Headers

var response = await Firefly.Get("https://httpbin.org/get", new { Authorization = "Bearer YOUR_TOKEN" });
Console.WriteLine(response);

POST Request (JSON)

var data = new { name = "Firefly", version = "1.0" };
var response = await Firefly.Post("https://httpbin.org/post", data);
Console.WriteLine(response);

PUT Request (JSON)

var data = new { name = "Firefly", version = "2.0" };
var response = await Firefly.Put("https://httpbin.org/put", data);
Console.WriteLine(response);

DELETE Request

var response = await Firefly.Delete("https://httpbin.org/delete");
Console.WriteLine(response);

POST Request (XML)

// using raw XML string payload
var data = "<ExampleModel><Id>1</Id><Name>Firefly XML</Name></ExampleModel>";
var response = await Firefly.PostXml("https://httpbin.org/post", data);
Console.WriteLine(response);

// using object to serialize to XML
var data = new ExampleModel { Id = 1, Name = "Firefly XML" };
var response = await Firefly.PostXml("https://httpbin.org/post", data);
Console.WriteLine(response);

Simplified JSON Call With Custome Response Type

var client = new FireflyClient("https://api.example.com");
var result = await client.SendJson<YourResponseType>(
HttpMethod.Post,
"/some-endpoint",
new MyRequestType { Property = "value" });

WebSocket Simple Connection

var webSocket = await FireflyWebSocket.ConnectAsync("wss://example.com/socket");
await webSocket.SendAsync("Hello from Firefly!"); // for text based events
await webSocket.SendBinaryAsync(new byte[] { 1, 2, 3, 4 }); //for binary based events

// event handling for incoming Text, Binary & Errors
webSocket.OnMessageReceived += text => Console.WriteLine($"Received: {text}");
webSocket.OnBinaryReceived += data => Console.WriteLine($"Received: {data}");
webSocket.OnError += ex => Console.WriteLine($"Error: {ex.Message}");

gRpc

using FireflyGrpc;


// Connect to gRPC Server
var grpc = await FireflyGrpcClient<Greeter.GreeterClient>.ConnectAsync(
	"https://localhost:5001",
	channel => new Greeter.GreeterClient(channel)
);

// Unary Call (Simple Request-Response)
var reply = await grpc.Client.SayHelloAsync(new HelloRequest { Name = "Firefly" });
Console.WriteLine(reply.Message);

// Server Streaming
using var call = grpc.Client.StreamMessages(new StreamRequest { Name = "Firefly" });
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
	Console.WriteLine($"Message: {message.Message}");
}

// Client Streaming
using var call = grpc.Client.ClientStreamMessages();
for (int i = 1; i <= 3; i++)
{
	await call.RequestStream.WriteAsync(new ClientRequest { Message = $"Hello {i}" });
}
await call.RequestStream.CompleteAsync();

var response = await call.ResponseAsync;
Console.WriteLine($"Confirmation: {response.Confirmation}");

// Bidirectional Streaming (Duplex) Chat functionality
using var chat = grpc.Client.Chat();
var sendingTask = Task.Run(async () =>
{
	for (int i = 0; i < 3; i++)
	{
		await chat.RequestStream.WriteAsync(new ChatMessage { User = "Client", Message = $"Ping {i}" });
		await Task.Delay(1000);
	}
	await chat.RequestStream.CompleteAsync();
});

var receivingTask = Task.Run(async () =>
{
	await foreach (var message in chat.ResponseStream.ReadAllAsync())
	{
		Console.WriteLine($"{message.User}: {message.Message}");
	}
});

await Task.WhenAll(sendingTask, receivingTask);

Features

✔️ Simple and clean API for making HTTP requests. ✔️ Supports JSON and XML payloads. ✔️ Custom headers support. ✔️ Configurable request timeout. ✔️ Logging support. ✔️ WebSocket real-time events communications. ✔️ gRpc support.

License

MIT License

Changelog

v1.1.0

  • Support BaseAddress so users can configure it once instead of repeating full URLs.
  • Support default headers to avoid setting them manually for every request.
  • Change headers input parameter to Dictionary<string, string> for better usability.

v1.2.0

  • Added support for MultipartFormDataContent.
  • Improved error handling.

v1.3.0

  • Added DownloadFileAsStream for handling stream response.
  • Support automatic response deserialization (JSON & XML)
  • Improved request logging.
  • Optimized request handling for performance improvements.

v2.0.0

  • Added FireflyWebSocket for real-time (bi-directional) event communication with automatic reconnection.
  • Handles text and binary events.
  • Added optional logging support.

v2.1.0

  • Introduces update to Serializes your request object as JSON
  • Sets Content-Type: application/json
  • Deserializes the API response to YourResponseType
  • Json and XML support SendRequestXml<T>() was introduced in v1.3.0 and still fully supported.

v2.2.0

  • Introduced FireflyGrpcClient<TClient> for gRPC client support.
  • Connect to gRPC services with simplified API and support for strongly-typed service contracts.
  • Supports unary and streaming methods using generated gRPC stubs.
  • Minimal configuration, seamless integration alongside HTTP and WebSocket APIs.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on FireflyHttp:

Package Downloads
FireflyTester

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.2.0 285 6/12/2025
2.1.0 151 4/18/2025
2.0.0 107 3/29/2025
1.3.0 170 3/10/2025
1.2.0 222 3/3/2025
1.1.0 121 2/22/2025
1.0.1 126 2/10/2025
1.0.0 156 2/10/2025

FireflyHttp v2.2.0 – gRPC Client Support Added

- Introduced FireflyGrpc for seamless gRPC integration.
- Supports unary, server streaming, client streaming, and bidirectional (duplex) streaming out of the box.
- Built-in header management for authenticated or custom gRPC requests.
- Automatically handles GrpcChannel setup and client instantiation.
- Enables real-time communication over gRPC with minimal setup.

This updates maintains full compatibility with previous versions—no breaking changes introduced
For implementation examples, checkout https://github.com/rocklessg/FireflyHttp/tree/main/FireflyTester