#! /usr/bin/env lua -- -- chttp.lua -- Copyright (C) 2016 Adrian Perez -- -- Distributed under terms of the MIT license. -- local request = require "http.request" local headers = require "http.headers" local util = require "http.util" local encodeURI, decodeURI = util.encodeURI, util.decodeURI local dict_to_query = util.dict_to_query local CqHttpClient = { quote = function (self, text) return encodeURI(text) end, unquote = function (self, text) return decodeURI(text) end, } CqHttpClient.__index = CqHttpClient local function headers_to_dict(h) local headers = {} for name, value in pairs(h) do if name:sub(1, 1) ~= ":" then headers[name] = value end end return headers end function CqHttpClient:request(log, method, url, query_args, body, headers) do local qs = dict_to_query(query_args) if #qs > 0 then url = url .. "?" .. qs end end log(">~> %s %s", method, url) log(">>> %s", body) local req = request.new_from_uri(url) for name, value in pairs(headers) do req.headers:append(name, value) end req.headers:upsert(":method", method) if body then req:set_body(body) end local h, s = req:go() if not h then log("