http.parsers: parse a "simple request".
parent
0fda669750
commit
e164fcf431
|
@ -46,8 +46,7 @@ IN: http.parsers
|
||||||
{ "0" "1" } one-of ,
|
{ "0" "1" } one-of ,
|
||||||
] seq* [ "" concat-as ] action ;
|
] seq* [ "" concat-as ] action ;
|
||||||
|
|
||||||
PEG: parse-request-line ( string -- triple )
|
: 'full-request' ( -- parser )
|
||||||
#! Triple is { method url version }
|
|
||||||
[
|
[
|
||||||
'space' ,
|
'space' ,
|
||||||
'http-method' ,
|
'http-method' ,
|
||||||
|
@ -56,7 +55,20 @@ PEG: parse-request-line ( string -- triple )
|
||||||
'space' ,
|
'space' ,
|
||||||
'http-version' ,
|
'http-version' ,
|
||||||
'space' ,
|
'space' ,
|
||||||
] seq* just ;
|
] seq* ;
|
||||||
|
|
||||||
|
: 'simple-request' ( -- parser )
|
||||||
|
[
|
||||||
|
'space' ,
|
||||||
|
"GET" token ,
|
||||||
|
'space' ,
|
||||||
|
'url' ,
|
||||||
|
'space' ,
|
||||||
|
] seq* [ "1.0" suffix! ] action ;
|
||||||
|
|
||||||
|
PEG: parse-request-line ( string -- triple )
|
||||||
|
#! Triple is { method url version }
|
||||||
|
'full-request' 'simple-request' 2array choice ;
|
||||||
|
|
||||||
: 'text' ( -- parser )
|
: 'text' ( -- parser )
|
||||||
[ control? ] except ;
|
[ control? ] except ;
|
||||||
|
|
|
@ -63,6 +63,23 @@ IN: http.server.tests
|
||||||
[ read-request ] with-string-reader
|
[ read-request ] with-string-reader
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! RFC 1945; Section 4.1
|
||||||
|
! Implement a version of Simple-Request, although rather than
|
||||||
|
! parse version 0.9, we parse 1.0 to return a Full-Response.
|
||||||
|
[
|
||||||
|
T{ request
|
||||||
|
{ method "GET" }
|
||||||
|
{ url URL" /" }
|
||||||
|
{ version "1.0" }
|
||||||
|
{ header H{ } }
|
||||||
|
{ cookies V{ } }
|
||||||
|
{ redirects 10 }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
"\r\n\r\n\r\nGET /\r\n\r\n"
|
||||||
|
[ read-request ] with-string-reader
|
||||||
|
] unit-test
|
||||||
|
|
||||||
! Don't rethrow parse-errors with an empty request string. They are
|
! Don't rethrow parse-errors with an empty request string. They are
|
||||||
! expected from certain browsers when the server serves a certificate
|
! expected from certain browsers when the server serves a certificate
|
||||||
! that the browser can't verify.
|
! that the browser can't verify.
|
||||||
|
|
Loading…
Reference in New Issue