std::http - HTTP通信ライブラリ

Cm標準ライブラリのHTTP通信モジュール。クライアントとサーバの両方をサポートします。

対応バックエンド: Native (LLVM) のみ。OpenSSLが必要。

最終更新: 2026-02-08


概要

std::http はHTTP/HTTPS通信のための高レベルAPIを提供します。


HttpClient(クライアント)

基本的な使い方

import std::http::HttpClient;
import std::http::HttpResponse;
import std::io::println;

int main() {
    HttpClient client;
    client.init("localhost", 8080);

    // GETリクエスト
    HttpResponse resp = client.get("/api/data");
    if (resp.is_ok == 1) {
        println("Status: {resp.status}");
        println("Body: {resp.body}");
    } else {
        println("Error: {resp.err_msg}");
    }

    return 0;
}

HTTPメソッド

メソッド 説明
client.get(path) GETリクエスト
client.post(path, body) POSTリクエスト (JSON等)
client.put(path, body) PUTリクエスト
client.delete_req(path) DELETEリクエスト

HttpResponse

フィールド 説明
status int HTTPステータスコード (200, 404等)
is_ok int 成功=1, 失敗=0
body string レスポンスボディ
err_msg string エラーメッセージ (失敗時)

HttpRequest(カスタムリクエスト)

カスタムヘッダーや認証が必要な場合に使用します。

import std::http::HttpRequest;
import std::http::HttpResponse;
import std::http::METHOD_POST;
import std::io::println;

int main() {
    HttpRequest req;
    req.init();
    req.set_method(METHOD_POST());
    req.set_url("api.example.com", 443, "/v1/data");
    req.set_json();                          // Content-Type: application/json
    req.set_bearer_auth("my-token");         // Bearer認証
    req.set_body("{\"key\": \"value\"}");
    req.set_timeout(5000);                   // 5秒タイムアウト

    HttpResponse resp = req.execute();
    println("Status: {resp.status}");

    return 0;
}

リクエスト設定メソッド

メソッド 説明
set_method(method) HTTPメソッド設定
set_url(host, port, path) URL設定
set_header(key, value) カスタムヘッダー追加
set_body(body) リクエストボディ設定
set_json() Content-Type: application/json
set_timeout(ms) タイムアウト設定(ミリ秒)
set_basic_auth(user, pass) Basic認証
set_bearer_auth(token) Bearer認証
set_follow_redirects(flag) リダイレクト追跡
execute() リクエスト実行 → HttpResponse

HTTPメソッド定数

定数
METHOD_GET() 0
METHOD_POST() 1
METHOD_PUT() 2
METHOD_DELETE() 3
METHOD_PATCH() 4

HttpServer(サーバ)

シンプルなHTTPサーバを構築できます。

import std::http::HttpServer;
import std::http::HttpServerRequest;
import std::io::println;

int main() {
    HttpServer server;
    server.init(8080);
    server.listen();
    println("Server started on port 8080");

    // 10リクエストを処理
    for (int i = 0; i < 10; i++) {
        HttpServerRequest req = server.accept();
        string method = req.method();
        string path = req.path();
        println("{method} {path}");

        if (path == "/api/hello") {
            req.respond(200, "{\"message\": \"Hello!\"}");
        } else {
            req.respond(404, "{\"error\": \"Not Found\"}");
        }
    }

    server.close();
    return 0;
}

HttpServerRequest

メソッド 説明
method() HTTPメソッド取得 (“GET”, “POST”等)
path() リクエストパス取得
body() リクエストボディ取得
header(key) ヘッダー値取得
respond(status, body) レスポンス送信(接続もクローズ)

URL解析

import std::http::parse_url;
import std::http::ParsedUrl;

ParsedUrl url = parse_url("https://api.example.com:8080/v1/data");
// url.scheme = "https"
// url.host   = "api.example.com"
// url.port   = 8080
// url.path   = "/v1/data"

注意事項


最終更新: 2026-02-08