Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stil/CurlThin
Lightweight cURL wrapper for C# with support for curl_multi polling interface through libuv
https://github.com/stil/CurlThin
curl http http-client libcurl libuv multiprocessing
Last synced: 7 days ago
JSON representation
Lightweight cURL wrapper for C# with support for curl_multi polling interface through libuv
- Host: GitHub
- URL: https://github.com/stil/CurlThin
- Owner: stil
- License: other
- Created: 2017-05-17T01:33:06.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-11-23T15:17:04.000Z (12 months ago)
- Last Synced: 2024-10-21T02:57:02.376Z (14 days ago)
- Topics: curl, http, http-client, libcurl, libuv, multiprocessing
- Language: C#
- Homepage:
- Size: 140 KB
- Stars: 68
- Watchers: 9
- Forks: 18
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dotnet-core - CurlThin - Lightweight cURL binding library for C# with support for multiple simultaneous transfers through curl_multi interface. (Frameworks, Libraries and Tools / Networking)
- awesome-dotnet-core - CurlThin - 轻量级cURL绑定库,支持通过curl_multi接口进行多个同时传输。 (框架, 库和工具 / 网络)
- fucking-awesome-dotnet-core - CurlThin - Lightweight cURL binding library for C# with support for multiple simultaneous transfers through curl_multi interface. (Frameworks, Libraries and Tools / Networking)
- awesome-dotnet-core - CurlThin - Lightweight cURL binding library for C# with support for multiple simultaneous transfers through curl_multi interface. (Frameworks, Libraries and Tools / Networking)
README
# CurlThin #
[![Gitter](https://img.shields.io/gitter/room/CurlThin/Lobby.svg)](https://gitter.im/CurlThin/Lobby)_CurlThin_ is a NET Standard compatible binding library against [libcurl](http://curl.haxx.se/libcurl).
It includes a modern wrapper for `curl_multi` interface which uses polling with [libuv](https://libuv.org/) library instead of using inefficient `select`._CurlThin_ has a very thin abstraction layer, which means that writing the code is as close as possible to writing purely in libcurl. libcurl has extensive documentation and relatively strong support of community and not having additional abstraction layer makes it easier to search solutions for your problems.
Using this library is very much like working with cURL's raw C API.
### License ###
Library is MIT licensed. NuGet icon made by [Freepik](http://www.freepik.com) and is licensed by [CC 3.0 BY](https://creativecommons.org/licenses/by/3.0/)## Installation ##
| Package | NuGet | MyGet | Description |
|-----------|--------------|-------|--------------|
| `CurlThin` | [![Nuget](https://img.shields.io/nuget/v/CurlThin.svg)](https://www.nuget.org/packages/CurlThin/) | ![MyGet](https://img.shields.io/myget/curlthin/vpre/CurlThin.svg) | The C# wrapper for libcurl. |
| `CurlThin.Native` | [![Nuget](https://img.shields.io/nuget/v/CurlThin.Native.svg)](https://www.nuget.org/packages/CurlThin.Native/) | ![MyGet](https://img.shields.io/myget/curlthin/vpre/CurlThin.Native.svg) | Contains embedded libcurl native binaries for x86 and x64 Windows. |If you have `libcurl` or `libcurl.dll` already in your PATH directory, you don't need to install `CurlThin.Native` package. Once you have installed `CurlThin.Native` NuGet package, call following method just once before you use cURL:
```csharp
CurlResources.Init();
```It will extract following files to your application output directory
| Windows x86 | Windows x64 | Description |
|-------------|-------------|-------------|
| libcurl.dll | libcurl.dll | The multiprotocol file transfer library. |
| libssl-1_1.dll | libssl-1_1-x64.dll | Portion of OpenSSL which supports TLS ( SSL and TLS Protocols), and depends on libcrypto. |
| libcrypto-1_1.dll | libcrypto-1_1-x64.dll | Provides the fundamental cryptographic routines used by libssl. |
| curl-ca-bundle.crt | curl-ca-bundle.crt | Certificate Authority (CA) bundle. You can use it via [`CURLOPT_CAINFO`](https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html). |## Examples ##
### Easy interface ###
#### GET request ####
```csharp
// curl_global_init() with default flags.
var global = CurlNative.Init();// curl_easy_init() to create easy handle.
var easy = CurlNative.Easy.Init();
try
{
CurlNative.Easy.SetOpt(easy, CURLoption.URL, "http://httpbin.org/ip");var stream = new MemoryStream();
CurlNative.Easy.SetOpt(easy, CURLoption.WRITEFUNCTION, (data, size, nmemb, user) =>
{
var length = (int) size * (int) nmemb;
var buffer = new byte[length];
Marshal.Copy(data, buffer, 0, length);
stream.Write(buffer, 0, length);
return (UIntPtr) length;
});var result = CurlNative.Easy.Perform(easy);
Console.WriteLine($"Result code: {result}.");
Console.WriteLine();
Console.WriteLine("Response body:");
Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
}
finally
{
easy.Dispose();if (global == CURLcode.OK)
{
CurlNative.Cleanup();
}
}
```#### POST request ####
```csharp
// curl_global_init() with default flags.
var global = CurlNative.Init();// curl_easy_init() to create easy handle.
var easy = CurlNative.Easy.Init();
try
{
var postData = "fieldname1=fieldvalue1&fieldname2=fieldvalue2";CurlNative.Easy.SetOpt(easy, CURLoption.URL, "http://httpbin.org/post");
// This one has to be called before setting COPYPOSTFIELDS.
CurlNative.Easy.SetOpt(easy, CURLoption.POSTFIELDSIZE, Encoding.ASCII.GetByteCount(postData));
CurlNative.Easy.SetOpt(easy, CURLoption.COPYPOSTFIELDS, postData);
var stream = new MemoryStream();
CurlNative.Easy.SetOpt(easy, CURLoption.WRITEFUNCTION, (data, size, nmemb, user) =>
{
var length = (int) size * (int) nmemb;
var buffer = new byte[length];
Marshal.Copy(data, buffer, 0, length);
stream.Write(buffer, 0, length);
return (UIntPtr) length;
});var result = CurlNative.Easy.Perform(easy);
Console.WriteLine($"Result code: {result}.");
Console.WriteLine();
Console.WriteLine("Response body:");
Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
}
finally
{
easy.Dispose();if (global == CURLcode.OK)
{
CurlNative.Cleanup();
}
}
```### Multi interface ###
#### Web scrape StackOverflow questions ####
See [Multi/HyperSample.cs](CurlThin.Samples/Multi/HyperSample.cs).