Software /
code /
prosody
Changeset
3470:0e59b5cdd57b
net.http: Add http.formencode() for www-form-urlencoded from an array of fields (thanks dersd)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 27 Aug 2010 18:33:45 +0100 |
parents | 3469:011566d72331 |
children | 3471:482275e38224 |
files | net/http.lua |
diffstat | 1 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/net/http.lua Tue Aug 24 23:27:58 2010 +0100 +++ b/net/http.lua Fri Aug 27 18:33:45 2010 +0100 @@ -17,8 +17,9 @@ local listener = connlisteners_get("httpclient") or error("No httpclient listener!"); local t_insert, t_concat = table.insert, table.concat; -local tonumber, tostring, pairs, xpcall, select, debug_traceback, char, format = - tonumber, tostring, pairs, xpcall, select, debug.traceback, string.char, string.format; +local pairs, ipairs = pairs, ipairs; +local tonumber, tostring, xpcall, select, debug_traceback, char, format = + tonumber, tostring, xpcall, select, debug.traceback, string.char, string.format; local log = require "util.logger".init("http"); @@ -27,6 +28,23 @@ function urlencode(s) return s and (s:gsub("%W", function (c) return format("%%%02x", c:byte()); end)); end function urldecode(s) return s and (s:gsub("%%(%x%x)", function (c) return char(tonumber(c,16)); end)); end +local function _formencodepart(s) + return s and (s:gsub("%W", function (c) + if c ~= " " then + return format("%%%02x", c:byte()); + else + return "+"; + end + end)); +end +function formencode(form) + local result = {}; + for _, field in ipairs(form) do + t_insert(result, _formencodepart(field.name).."=".._formencodepart(field.value)); + end + return t_concat(result, "&"); +end + local function expectbody(reqt, code) if reqt.method == "HEAD" then return nil end if code == 204 or code == 304 or code == 301 then return nil end