httpPostResponse (Function)

Signature: httpPostResponse(clientID: int, path: string, body: string, headers: string) -> Result<int, Error>

Description: Sends an HTTP POST request and returns a response handle as Result<int, Error>; inspect and free it like a GET response.

Parameters

  • clientID (int): Client identifier from httpCreateClient
  • path (string): Request path
  • body (string): Request body
  • headers (string): Additional request headers

Returns: Result<int, Error>

Example

fn reply(_method, _path, _headers, _body) = HttpResponse {
    status: 200, headers: "X-Demo: hi\r\n", contentType: "text/plain",
    streamFd: -1, isComplete: true, partialBody: "hello"
}
fn runRequest(client) = {
    let result = match httpPostResponse(client, "/", "hello", "Content-Type: text/plain") {
        Success { value } => {
            let status = httpResponseStatus(value)
            let released = httpResponseFree(value)
            "status=${status}; released=${released}"
        }
        Error { message } => message
    }
    let closed = httpCloseClient(client)
    "${result}; client close=${closed}"
}
fn request() = {
    let client = httpCreateClient("http://127.0.0.1:18898", 1000)
    if client > 0 { runRequest(client) } else { "client error: ${client}" }
}
fn serve(server) = {
    let listening = httpListen(server, reply)
    let result = if listening == 0 { request() } else { "listen error: ${listening}" }
    let stopped = httpStopServer(server)
    "${result}; server stop=${stopped}"
}
let server = httpCreateServer(18898, "127.0.0.1")
print(if server > 0 { serve(server) } else { "server error: ${server}" })