curl-unity
November 18, 2019 ยท View on GitHub
This is a C# wrapper for Unity to use libcurl with http/2 and openssl enabled.
Prebuilt platforms
- Windows x64
- macOS 64bit
- iOS arm64
- Android armv7/arm64/x86
Libraries
| Name | Version |
|---|---|
| curl | 7.67.0 |
| nghttp2 | 1.39.2 |
| openssl | 1.1.1b |
Build
Requirements
- CMake is required for all platforms.
- NDK r16b is required for Android.
- Xcode is required for macOS/iOS.
- Visual Studio 2017 is required for Windows.
Scripts
There are several build script under build folder for each platform:
All the scripts will auto deloy the output files into
Assets/curl-unity/Plugins.
make_android.sh
Build libcurl.so for Android. Please use this script on macOS but it should also works on Linux.
make_ios.sh
Build libcurl.a for iOS. Please use this script on macOS
make_osx.sh
Build curl.bundle for macOS. Please use this script on macOS.
make_win.bat
Build curl.dll for Windows. Please use this script on Windows.
Install
Copy Assets/curl-unity to anywhere under your Unity project and done.
Optional
For a better performance you could enable Allow unsafe code and add ALLOW_UNSAFE to the Scripting Define Symbols in the project settings.

Usage
Select single thread/mutli thread mode
A CurlMultiUpdater component is needed to be created before any request and then you could check multiThread on or not.
Non-blocking multi perform
Only by using this multi perform that could take the advantage of HTTP/2 multiplexing feature.
void Start()
{
for (int i = 0; i < 5; i++)
{
var easy = new CurlEasy();
easy.url = "https://nghttp2.org";
easy.timeout = 5000;
// NOTICE: This callback may be invoked on other thread
easy.performCallback = OnPerformCallback;
// You could also create your own CurlMulti instance
easy.MultiPerform(CurlMulti.DefaultMulti);
}
}
void OnPerformCallback(CURLE result, CurlEasy easy)
{
if (result == CURLE.OK)
{
Debug.Log(easy.inText);
}
}
Non-blocking easy perform
Not recommended. You should take care of the thread safe issues and it can't be canceled before done.
async void Start()
{
var easy = new CurlEasy();
easy.url = "https://nghttp2.org";
easy.timeout = 5000;
if (await easy.PerformAsync() == CURLE.OK)
{
Debug.Log(easy.inText);
}
}
Blocking easy perform
void Start()
{
var easy = new CurlEasy();
easy.url = "https://nghttp2.org";
easy.timeout = 5000;
if (easy.Perform() == CURLE.OK)
{
Debug.Log(easy.inText);
}
}