Title: Apache HTTP Request Library
license: https://www.apache.org/licenses/LICENSE-2.0

# Apache HTTP Request Library #

*libapreq* is a shared library with associated modules for manipulating
client request data via the Apache API. It also includes language bindings
for Perl (Apache::Request and Apache::Cookie). Functionality includes:

- parsing of application/x-www-form-urlencoded data

- parsing of multipart/form-data

- parsing of HTTP cookies

Documentation for the latest release of libapreq2 is located at
[https://httpd.apache.org/apreq/docs/libapreq2](docs/libapreq2).

# News #

**August 25, 2022** - libapreq2-2.17 was released.

**March 19, 2021** - libapreq2-2.16 was released.

**November 13, 2020** - libapreq2-2.15 was released.

**December 3, 2010** - libapreq2-2.13 was released.

**March 13, 2009** - libapreq2-2.12 was released.

**January 7, 2009** - libapreq-1.34 was released.

**August 8, 2006** - libapreq2-2.08 was released.

**February 12, 2006** - libapreq2-2.07 was released.

**July 20, 2005** - libapreq2-2.06-dev was released.

**May 5, 2005** - libapreq2-2.05-dev was released.

**December 16, 2004** - libapreq-1.33 was released.

**August 30, 2004** - libapreq2-2.04-dev was released.

**June 12, 2004** - libapreq2-2.03-dev was released.

**November 16, 2003** - libapreq2-2.02-dev was released.

**November 11, 2003** - libapreq2-2.01-dev was released.

**September 27, 2003** - libapreq-1.3 was released.

**June 19, 2003** - libapreq-1.2 was released.

**January 28, 2003** - libapreq-1.1 was released.

**February 21, 2002** - libapreq-1.0 was released.

# Downloads #

You can download the latest version of *libapreq* from:

-  [ASF mirror](/apreq/download.cgi) 

-  [CPAN](http://search.cpan.org/search?mode=module&amp;query=libapreq)
('perl -MCPAN -e "install libapreq"')

# Mailing Lists #

There are two mailing lists devoted to the development of *libapreq*.

[apreq-dev@httpd.apache.org](mailto:apreq-dev-subscribe@httpd.apache.org) -
discusses libapreq development

-  [list
archives](http://marc.theaimsgroup.com/?l=apreq-dev&amp;r=1&amp;w=2) 

-  [NNTP gateway](nntp://news.gmane.org/gmane.comp.apache.apreq) 

[apreq-cvs@httpd.apache.org](mailto:apreq-cvs-subscribe@httpd.apache.org) -
cvs commit logs for httpd-apreq and httpd-apreq-2

-  [list
archives](http://marc.theaimsgroup.com/?l=apreq-cvs&amp;r=1&amp;w=2) 

# SVN #

Development of *libapreq* can be followed through the
[Subversion](http://subversion.apache.org/) repositories. For public access,
you can use:

    % svn checkout http://svn.apache.org/repos/asf/httpd/apreq/trunk/ httpd-apreq-2
    % svn checkout http://svn.apache.org/repos/asf/httpd/apreq/branches/1.x/ httpd-apreq

You can also browse through the SVN repositories for
[httpd-apreq](http://svn.apache.org/viewcvs.cgi/httpd/apreq/branches/1.x/)
and [httpd-apreq-2](http://svn.apache.org/viewcvs.cgi/httpd/apreq/trunk/).
