chibi-scheme/lib/chibi/net/http.sld
2017-03-26 16:00:31 +09:00

48 lines
1.7 KiB
Scheme

(define-library (chibi net http)
(export http-get http-get/headers http-get-to-file
http-head http-post http-put http-delete
call-with-input-url call-with-input-url/headers
with-input-from-url
http-parse-request http-parse-form)
(import (scheme base) (scheme write) (scheme char) (scheme file)
(srfi 27)
(chibi uri) (chibi mime))
(cond-expand
(chicken
(import (only (chicken) parameterize))
(import (only (ports) make-input-port))
(import (only (tcp) tcp-connect))
(begin
(define (make-custom-binary-input-port read-bv)
(let ((bv (make-bytevector 1024))
(off 0)
(fill 0))
(define (refill!)
(set! off 0)
(set! fill (read-bv bv 0 1024)))
(make-input-port
(lambda ()
(if (>= off fill)
(refill!))
(if (< off fill)
(read-char (open-input-string ""))
(let ((res (integer->char (bytevector-u8-ref bv off))))
(set! off (+ 1 off))
res)))
(lambda ()
(or (< off fill)
(begin (refill!) (< off fill))))
(lambda () #f))))
(define (open-net-io host port . o)
(call-with-values (lambda () (tcp-connect host port))
(lambda (in out)
(list #f in out))))
(define (port->bytevector in)
(let ((out (open-output-bytevector)))
(do ((c (read-u8 in) (read-u8 in)))
((eof-object? c) (get-output-bytevector out))
(write-u8 c out))))))
(else
(import (srfi 39) (chibi io) (chibi net))))
(include "http.scm"))