HTTP::Parser - parse HTTP/1.1 request into HTTP::Request/Response object
my $parser = HTTP::Parser->new(); ... my $status = $parser->add($text); if(0 == $status) { print "request: ".$parser->request()->as_string(); # HTTP::Request } elsif(-2 == $status) { print "need a line of data\n"; } elsif(-1 == $status) { print "need more data\n"; } else { # $status > 0 print "need $status byte(s)\n"; }
This is an HTTP request parser. It takes chunks of text as received and returns a 'hint' as to what is required, or returns the HTTP::Request when a complete request has been read. HTTP/1.1 chunking is supported. It dies if it finds an error.
Create a new HTTP::Parser object. Takes named parameters, e.g.:
my $parser = HTTP::Parser->new(request => 1);
Allows or denies parsing an HTTP request and returning an HTTP::Request object.
HTTP::Request
Allows or denies parsing an HTTP response and returning an HTTP::Response object.
HTTP::Response
If you pass neither request nor response, only requests are parsed (for backwards compatibility); if you pass either, the other defaults to false (disallowing both requests and responses is a fatal error).
request
response
Parse request. Returns:
if finished (call object to get an HTTP::Request or Response object)
object
if not finished but not sure how many bytes remain
if waiting for a line (like 0 with a hint)
if waiting for that many bytes
Dies on error.
This method of parsing makes it easier to parse a request from an event-based system, on the other hand, it's quite alright to pass in the whole request. Ideally, the first chunk passed in is the header (up to the double newline), then whatever byte counts are requested.
When a request object is returned, the X-HTTP-Version header has the HTTP version, the uri() method will always return a URI object, not a string.
Note that a nonzero return is just a hint, and any amount of data can be passed in to a subsequent add() call.
Returns current data not parsed. Mainly useful after a request has been parsed. The data is not removed from the object's buffer, and will be seen before the data next passed to add().
Returns the count of extra bytes (length of data()) after a request.
Returns the object request. Only useful after the parse has completed.
David Robins <dbrobins@davidrobins.net>
HTTP::Request, HTTP::Response.
To install HTTP::Parser, copy and paste the appropriate command in to your terminal.
cpanm
cpanm HTTP::Parser
CPAN shell
perl -MCPAN -e shell install HTTP::Parser
For more information on module installation, please visit the detailed CPAN module installation guide.