---
name: "POE::Filter::HTTP::Parser"
section: "3pm"
platform: "linux"
package: "libpoe-filter-http-parser-perl"
version: "1.08-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/POE::Filter::HTTP::Parser"
---

# POE::Filter::HTTP::Parser(3pm)

A HTTP POE filter for HTTP clients or servers

## NAME

POE::Filter::HTTP::Parser - A HTTP POE filter for HTTP clients or servers

## VERSION

version 1.08

## SYNOPSIS

```
    use POE::Filter::HTTP::Parser;
    # For HTTP Servers
    my $request_filter = POE::Filter::HTTP::Parser->new( type => 'server' );
    my $arrayref_of_request_objects = $filter->get( [ $stream ] );
    my $arrayref_of_HTTP_stream = $filter->put( $arrayref_of_response_objects );
    # For HTTP clients
    my $response_filter = POE::Filter::HTTP::Parser->new( type => 'client' );
    my $arrayref_of_HTTP_stream = $filter->put( $arrayref_of_request_objects );
    my $arrayref_of_response_objects = $filter->get( [ $stream ] );
```

## DESCRIPTION

POE::Filter::HTTP::Parser is a POE::Filter for HTTP which is based on HTTP::Parser.

It can be used to easily create POE based HTTP servers or clients.

With the `"type"` set to `"client"`, which is the default behaviour, `"get"` will parse HTTP::Response objects from HTTP streams and `"put"` will accept HTTP::Request objects and convert them to HTTP streams.

With the `"type"` set to `"server"`, the reverse will happen. `"get"` will parse HTTP::Request objects from HTTP streams and `"put"` will accept HTTP::Response objects and convert them to HTTP streams. Like POE::Filter::HTTPD if there is an error parsing the HTTP request, this filter will generate a HTTP::Response object instead, to encapsulate the error message, suitable for simply sending back to the requesting client.

## CONSTRUCTOR

- "new"

  Creates a new POE::Filter::HTTP::Parser object. Takes one optional argument, `"type"` which determines whether the filter will act in `"client"` or `"server"` mode. `"client"` is the default if `"type"` is not specified.

  ```
    'type', set to either 'client' or 'server', default is 'client';
  ```

## METHODS

- "get"

  - "get\_one\_start"

  - "get\_one"

  Takes an arrayref which contains lines of text. Returns an arrayref of either HTTP::Request or HTTP::Response objects depending on the `"type"` that has been specified.

- "get\_pending"

  Returns any data remaining in a filter's input buffer. The filter's input buffer is not cleared, however. Returns an array reference if there's any data, or undef if the filter was empty.

- "put"

  Takes an arrayref of either HTTP::Response objects or HTTP::Request objects depending on whether `"type"` is set to `"server"` or `"client"`, respectively.

  If `"type"` is `"client"`, then this accepts HTTP::Request objects. If `"type"` is `"server"`, then this accepts HTTP::Response objects.

  This does make sense if you think about it.

  The given objects are returned to their stream form.

- "clone"

  Makes a copy of the filter, and clears the copy's buffer.

## CREDITS

The `"put"` method for HTTP responses was borrowed from POE::Filter::HTTPD, along with the code to generate HTTP::Response on a parse error, by Artur Bergman and Rocco Caputo.

## SEE ALSO

POE::Filter

HTTP::Parser

POE::Filter::HTTPD

## AUTHOR

Chris Williams \<chris@bingosnet.co.uk\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Chris Williams, Artur Bergman and Rocco Caputo.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
