İçeriğe geç

HTTP İstemcisi

lib/http_client.tpr, gömülü outbound HTTP kütüphanesidir. Bir Tulpar programının içinden başka API’leri çağırmak için kullan — ekstra dependency yok, npm install yok.

import "http_client";
json r = http_get("http://api.example.com/users/1");
if (r["ok"]) {
print("status=" + toString(r["status"]));
print("body=" + r["body"]);
}
HelperSarar
http_get(url)Boş gövdeli GET
http_post(url, body)Ham string gövdeli POST
http_put(url, body)PUT
http_delete(url)DELETE
http_get_json(url)GET + 2xx ise fromJson(body)
http_post_json(url, data)toJson(data) POST + cevabı parse
http_request(method, url, body)Düşük seviye primitif

Tüm helper’lar aynı zarfı döner:

json r = http_get("http://api.example.com/");
if (r["ok"]) {
int status = r["status"]; // 200, 404, ...
json headers = r["headers"]; // case-sensitive header haritası
str body = r["body"]; // ham response gövdesi
} else {
str why = r["error"]; // "connect failed", "TLS handshake failed", ...
}

_json varyantları ek olarak r["body"]’yi parse edip r["data"]’ya koyar:

json r = http_get_json("http://api.example.com/users/1");
if (r["ok"]) {
json user = r["data"];
print("merhaba " + user["name"]);
}

https:// URL’leri Tulpar’ın OpenSSL ile build’ini gerektirir. Yoksa çağrı {"ok": 0, "error": "TLS not compiled in (build Tulpar with OpenSSL to enable https://)"} döner.

MSYS2’de TLS aktive etmek için:

Terminal window
pacman -S mingw-w64-x86_64-openssl
./build.sh

CMake find_package(OpenSSL) ile otomatik algılar ve TULPAR_HAS_TLS=1 define’ını açar. SNI otomatik set, sertifika doğrulama şu an SSL_VERIFY_NONE (yapılandırılabilir trust-store yolu inene kadar).

Her fiilin bloklamak yerine bir promise döndüren bir _async ikizi vardır: http_get_async, http_post_async, http_put_async, http_delete_async (http_request_async built-in’ini sarmalar). İstek bir worker pool’da koşarken async event loop diğer coroutine’leri pompalamaya devam eder; böylece birden çok upstream’e aynı anda dağılıp sonuçları gather edebilirsiniz:

import "http_client";
async func dashboard() {
// Üç upstream eşzamanlı çekilir — toplam süre ~ en yavaş olanı.
var r = await gather(
http_get_async("http://api/users"),
http_get_async("http://api/orders"),
http_get_async("http://api/stats")
);
return r;
}
var data = await dashboard();
print(toString(data[0]["status"])); // 200

Çözülen değer, bloklayan istemciyle aynı { ok, status, headers, body } zarfıdır. Worker-pool boyutu default 4’tür; TULPAR_HTTP_POOL ortam değişkeniyle değiştirin. Tam eşzamanlılık modeli ve bir istek reject ettiğinde hata yönetimi için Async / Await rehberine bakın.

Bugün:

  • HTTP/1.0 (client tarafında keep-alive yok)
  • OpenSSL ile derlendiğinde HTTPS
  • 8 MB cevap gövdesi sınırı
  • Otomatik redirect takibi yok
  • Chunked transfer-encoding yok