Fixing the handling of request bodies on non-POST methods
This commit is contained in:
parent
9a034c44ad
commit
78151e073b
|
@ -1990,6 +1990,7 @@ path/s is either such a string or a list of them.
|
||||||
"collects/tests/utils/gui.rkt" drdr:command-line (gracket-text "-t" *)
|
"collects/tests/utils/gui.rkt" drdr:command-line (gracket-text "-t" *)
|
||||||
"collects/tests/web-server" responsible (jay)
|
"collects/tests/web-server" responsible (jay)
|
||||||
"collects/tests/web-server/pr/length.rkt" drdr:command-line #f
|
"collects/tests/web-server/pr/length.rkt" drdr:command-line #f
|
||||||
|
"collects/tests/web-server/pr/methods.rkt" drdr:command-line #f
|
||||||
"collects/tests/web-server/run-all-tests.rkt" drdr:timeout 300
|
"collects/tests/web-server/run-all-tests.rkt" drdr:timeout 300
|
||||||
"collects/tests/web-server/servlet-env/env.rkt" drdr:command-line (mzc *)
|
"collects/tests/web-server/servlet-env/env.rkt" drdr:command-line (mzc *)
|
||||||
"collects/tests/web-server/servlet-env/insta.rkt" drdr:command-line (mzc "-k" *)
|
"collects/tests/web-server/servlet-env/insta.rkt" drdr:command-line (mzc "-k" *)
|
||||||
|
|
22
collects/tests/web-server/pr/methods.rkt
Normal file
22
collects/tests/web-server/pr/methods.rkt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#lang racket
|
||||||
|
|
||||||
|
(require web-server/servlet-env
|
||||||
|
web-server/http/xexpr
|
||||||
|
web-server/http/request-structs
|
||||||
|
web-server/dispatch)
|
||||||
|
|
||||||
|
(define-values (app-dispatch app-url)
|
||||||
|
(dispatch-rules
|
||||||
|
[("") index]
|
||||||
|
[else index]))
|
||||||
|
|
||||||
|
(define (index req)
|
||||||
|
(response/xexpr `(html (p ,(bytes->string/utf-8 (request-method req)))
|
||||||
|
(p ,(cond ((bytes? (request-post-data/raw req))
|
||||||
|
(bytes->string/utf-8 (request-post-data/raw req)))
|
||||||
|
(else "No request body"))))))
|
||||||
|
|
||||||
|
(serve/servlet app-dispatch
|
||||||
|
#:port 8000
|
||||||
|
#:servlet-regexp #rx""
|
||||||
|
#:command-line? #t)
|
|
@ -215,9 +215,8 @@
|
||||||
[else
|
[else
|
||||||
(network-error 'read-bindings "Post request contained a non-numeric content-length")])]
|
(network-error 'read-bindings "Post request contained a non-numeric content-length")])]
|
||||||
[#f
|
[#f
|
||||||
(let ([raw-bytes (apply bytes-append (read-to-eof in))])
|
(values (delay empty) #f)])]))]
|
||||||
(values (delay (parse-bindings raw-bytes)) raw-bytes))])]))]
|
[meth
|
||||||
[(bytes-ci=? #"PUT" meth)
|
|
||||||
(local
|
(local
|
||||||
[(define content-type (headers-assq* #"Content-Type" headers))
|
[(define content-type (headers-assq* #"Content-Type" headers))
|
||||||
(define in (connection-i-port conn))]
|
(define in (connection-i-port conn))]
|
||||||
|
@ -228,12 +227,9 @@
|
||||||
(let ([raw-bytes (read-bytes len in)])
|
(let ([raw-bytes (read-bytes len in)])
|
||||||
(values (delay empty) raw-bytes)))]
|
(values (delay empty) raw-bytes)))]
|
||||||
[else
|
[else
|
||||||
(network-error 'read-bindings "Put request contained a non-numeric content-length")])]
|
(network-error 'read-bindings "Non-GET/POST request contained a non-numeric content-length")])]
|
||||||
[#f
|
[#f
|
||||||
(let ([raw-bytes (apply bytes-append (read-to-eof in))])
|
(values (delay empty) #f)]))]))
|
||||||
(values (delay empty) raw-bytes))]))]
|
|
||||||
[meth
|
|
||||||
(values (delay empty) #f)]))
|
|
||||||
|
|
||||||
;; parse-bindings : bytes? -> (listof binding?)
|
;; parse-bindings : bytes? -> (listof binding?)
|
||||||
(define (parse-bindings raw)
|
(define (parse-bindings raw)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user