Here a simple implementation of reading a form encoded body (bytevector) into an alist:
(define-module (my module)
#:use-module (ice-9 textual-ports)
#:use-module (ice-9 time)
#:use-module (ice-9 format)
#:use-module (ice-9 string-fun)
#:use-module (ice-9 iconv)
#:export (read-url-encoded-body))
(define (at-eq x)
(string-split x #\=))
(define (unsafe-mk-alist x)
(cons (car x)
(cdr x)))
(define (read-url-encoded-body body)
(let* ((str (bytevector->string body "utf-8"))
(raw-kv-pairs (string-split str #\&))
(xss (map unsafe-mk-alist
(map at-eq raw-kv-pairs))))
xss))
Then in your controller you can use it as:
(let* ((body (rc-body rc))
(kv (read-url-encoded-body body)))
(display (format #f "parsed body alist: ~s" kv))