Adding call-with-input-url/headers convenience utility.

This commit is contained in:
Alex Shinn 2014-03-15 18:59:11 +09:00
parent 7727c4c45d
commit f85c7ffa6f
2 changed files with 15 additions and 4 deletions

View file

@ -100,9 +100,9 @@
(let ((enc (assq-ref headers 'transfer-encoding))) (let ((enc (assq-ref headers 'transfer-encoding)))
(cond (cond
((equal? enc "chunked") ((equal? enc "chunked")
(http-wrap-chunked-input-port in)) (cons headers (http-wrap-chunked-input-port in)))
(else (else
in)))) (cons headers in)))))
((3) ((3)
(close-input-port in) (close-input-port in)
(close-output-port out) (close-output-port out)
@ -115,17 +115,26 @@
(close-output-port out) (close-output-port out)
(error "couldn't retrieve url" url resp))))))))) (error "couldn't retrieve url" url resp)))))))))
(define (http-get url . headers) (define (http-get/headers url . headers)
(http-get/raw url (http-get/raw url
(if (pair? headers) (car headers) '()) (if (pair? headers) (car headers) '())
http-redirect-limit)) http-redirect-limit))
(define (http-get url . headers)
(cdr (apply http-get/headers url headers)))
(define (call-with-input-url url proc) (define (call-with-input-url url proc)
(let* ((p (http-get url)) (let* ((p (http-get url))
(res (proc p))) (res (proc p)))
(close-input-port p) (close-input-port p)
res)) res))
(define (call-with-input-url/headers url proc)
(let* ((h+p (http-get/headers url))
(res (proc (car h+p) (cdr h+p))))
(close-input-port (cdr h+p))
res))
(define (with-input-from-url url thunk) (define (with-input-from-url url thunk)
(let ((p (http-get url))) (let ((p (http-get url)))
(let ((res (parameterize ((current-input-port p)) (thunk)))) (let ((res (parameterize ((current-input-port p)) (thunk))))

View file

@ -1,6 +1,8 @@
(define-library (chibi net http) (define-library (chibi net http)
(export http-get call-with-input-url with-input-from-url (export http-get http-get/headers
call-with-input-url call-with-input-url/headers
with-input-from-url
http-parse-request http-parse-form) http-parse-request http-parse-form)
(import (chibi) (srfi 39) (chibi net) (chibi io) (import (chibi) (srfi 39) (chibi net) (chibi io)
(chibi uri) (chibi mime)) (chibi uri) (chibi mime))