curl — HTTP client

Requires: libcurl (auto-installed via minks install curl)

#include "curl"

Method Args Out Description
Curl:Get url String HTTP GET → response body
Curl:Post url, body String HTTP POST with body
Curl:Put url, body String HTTP PUT with body
Curl:Delete url String HTTP DELETE
Curl:Status Number HTTP status code of last request
Curl:SetHeader key, value void Set a persistent request header
Curl:ClearHeaders void Remove all set headers
Curl:SetTimeout seconds void Request timeout (default: 30)

Throws CurlException on connection failure. See Object — Exception.

Curl:SetHeader("Authorization", "Bearer mytoken");
Curl:SetHeader("Accept", "application/json");

Var:String body;
Var:Number status;

try {
    Curl:Get("https://api.example.com/users", body);
} catch (CurlException e) {
    Konsol:Print("curl error: ${e.message}");
}

Curl:Status(status);
Konsol:Print("${status}: ${body}");

Curl:ClearHeaders();

Building from source

Platform Command
Debian/Ubuntu sudo apt install libcurl4-openssl-dev
Fedora/RHEL sudo dnf install libcurl-devel
macOS brew install curl
MSYS2 MINGW64 pacman -S mingw-w64-x86_64-curl
MSYS2 UCRT64 pacman -S mingw-w64-ucrt-x86_64-curl
MSYS2 CLANG64 pacman -S mingw-w64-clang-x86_64-curl
MSYS2 CLANGARM64 pacman -S mingw-w64-clang-aarch64-curl

The Makefile auto-detects via pkg-config.

make -C curl_plugin

Examples

// test_curl.ks — Curl plugin tests
// Run: minks --plugin ./kse_curl.dll test_curl.ks
// Requires network access; uses httpbin.org as echo server.

Konsol:Print("=== Curl plugin ===");

Var:String body;
Var:Number code;

// ── GET ────────────────────────────────────────────────────────────────────────

Konsol:Print("--- GET");
Curl:Get("https://httpbin.org/get", body);
Curl:Status(code);
Konsol:Print("status : ${code}");
Konsol:Print("body   : ${body}");

// ── POST ───────────────────────────────────────────────────────────────────────

Konsol:Print("--- POST");
Curl:Post("https://httpbin.org/post", "hello=world&lang=minks", body);
Curl:Status(code);
Konsol:Print("status : ${code}");
Konsol:Print("body   : ${body}");

// ── PUT ────────────────────────────────────────────────────────────────────────

Konsol:Print("--- PUT");
Curl:Put("https://httpbin.org/put", "{\"key\":\"value\"}", body);
Curl:Status(code);
Konsol:Print("status : ${code}");
Konsol:Print("body   : ${body}");

// ── DELETE ─────────────────────────────────────────────────────────────────────

Konsol:Print("--- DELETE");
Curl:Delete("https://httpbin.org/delete", body);
Curl:Status(code);
Konsol:Print("status : ${code}");
Konsol:Print("body   : ${body}");

// ── Custom headers ─────────────────────────────────────────────────────────────

Konsol:Print("--- custom headers");
Curl:SetHeader("X-Test-Header", "minks-curl");
Curl:SetHeader("Accept", "application/json");
Curl:Get("https://httpbin.org/headers", body);
Curl:Status(code);
Konsol:Print("status : ${code}");
Konsol:Print("body   : ${body}");
Curl:ClearHeaders();

// ── Status code passthrough ────────────────────────────────────────────────────

Konsol:Print("--- 404");
Curl:Get("https://httpbin.org/status/404", body);
Curl:Status(code);
Konsol:Print("status : ${code}");

Konsol:Print("--- 500");
Curl:Get("https://httpbin.org/status/500", body);
Curl:Status(code);
Konsol:Print("status : ${code}");

// ── Timeout ────────────────────────────────────────────────────────────────────

Konsol:Print("--- timeout (2s, then a real request)");
Curl:SetTimeout(2);
Curl:Get("https://httpbin.org/delay/5", body);
Curl:Status(code);
Konsol:Print("status after timeout : ${code}");

Curl:SetTimeout(30);
Curl:Get("https://httpbin.org/get", body);
Curl:Status(code);
Konsol:Print("status after restore : ${code}");

Konsol:Print("=== done ===");