Parser(3)
okay bestie, this is the Parser(3) page, and itβs all about HTTP::Parser β the little parser that takes HTTP/1.1 requests and turns them into HTTP::Request / HTTP::Response objects. slay. π
β¨ NAME β¨
HTTP::Parser β parse HTTP/1.1 request into HTTP::Request/Response object.
π¦ SYNOPSIS π¦
my $parser = HTTP::Parser->new();
...
my $status = $parser->add($text);
if(0 == $status) {
print "request: ".$parser->request()->as_string(); # HTTP::Request
} elsif(-3 == $status) {
print "no content length header!\n";
} 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";
}
πΈ DESCRIPTION πΈ
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. π
π new ( named params... ) π
Create a new HTTP::Parser object. Takes named parameters, e.g.:
my $parser = HTTP::Parser->new(request => 1);
requestβ Allows or denies parsing an HTTP request and returning anHTTP::Requestobject.responseβ Allows or denies parsing an HTTP response and returning anHTTP::Responseobject.
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). bestie, that backwards-compat detail is important, donβt skip it. π«Ά
π₯ add ( string ) π₯
Parse request. Returns:
0β if finished (callobjectto get anHTTP::RequestorResponseobject)-1β if not finished but not sure how many bytes remain-2β if waiting for a line (like0with a hint)-3β if there was nocontent-lengthheader, so we can't tell whether we are waiting for more data or not.- If you are reading from a TCP stream, you can keep adding data until the connection closes gracefully (the HTTP RFC allows this).
- If you are reading from a file, you should keep adding until you have all the data.
- Once you have added all data, you may call
object. if you are not sure whether you have all the data, theHTTP::Responseobject might be incomplete.
countβ 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. literally so handy. β¨
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. no cap. π―
π data π
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().
π¦ extra π¦
Returns the count of extra bytes (length of data()) after a request.
π object π
Returns the object request. Only useful after the parse has completed.
π AUTHOR π
Shoutout to David Robins <dbrobins@davidrobins.net> β fixes for 0.05 by David Cannings <david@edeca.net> π
π SEE ALSO π
HTTP::Request, HTTP::Response.
πΈ thatβs the whole vibe β perl v5.42.0, dated 2021-01-19, page Parser(3). bye bestie! πΈ
π¦ where this page comes from
- opensuse-leap 16.0: perl-HTTP-Parser 0.06-bp160.1.11 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms