@@ -161,16 +161,7 @@ class HttpRequestParser(HttpParser):
161161 Returns RawRequestMessage.
162162 """
163163
164- def __call__ (self , out , buf ):
165- # read HTTP message (request line + headers)
166- try :
167- raw_data = yield from buf .readuntil (
168- b'\r \n \r \n ' , self .max_headers )
169- except errors .LineLimitExceededParserError as exc :
170- raise errors .LineTooLong ('request header' , exc .limit ) from None
171-
172- lines = raw_data .split (b'\r \n ' )
173-
164+ def parse_message (self , lines ):
174165 # request line
175166 line = lines [0 ].decode ('utf-8' , 'surrogateescape' )
176167 try :
@@ -202,11 +193,21 @@ def __call__(self, out, buf):
202193 else : # HTTP 1.1 must ask to close.
203194 close = False
204195
205- out .feed_data (
206- RawRequestMessage (
207- method , path , version , headers , raw_headers ,
208- close , compression , upgrade ),
209- len (raw_data ))
196+ return RawRequestMessage (
197+ method , path , version , headers , raw_headers ,
198+ close , compression , upgrade )
199+
200+ def __call__ (self , out , buf ):
201+ # read HTTP message (request line + headers)
202+ try :
203+ raw_data = yield from buf .readuntil (
204+ b'\r \n \r \n ' , self .max_headers )
205+ except errors .LineLimitExceededParserError as exc :
206+ raise errors .LineTooLong ('request header' , exc .limit ) from None
207+
208+ lines = raw_data .split (b'\r \n ' )
209+
210+ out .feed_data (self .parse_message (lines ), len (raw_data ))
210211 out .feed_eof ()
211212
212213
0 commit comments