1HTTP::Daemon(3)       User Contributed Perl Documentation      HTTP::Daemon(3)
2
3
4

NAME

6       HTTP::Daemon - A simple http server class
7

VERSION

9       version 6.12
10

SYNOPSIS

12         use HTTP::Daemon;
13         use HTTP::Status;
14
15         my $d = HTTP::Daemon->new || die;
16         print "Please contact me at: <URL:", $d->url, ">\n";
17         while (my $c = $d->accept) {
18             while (my $r = $c->get_request) {
19             if ($r->method eq 'GET' and $r->uri->path eq "/xyzzy") {
20                     # remember, this is *not* recommended practice :-)
21                 $c->send_file_response("/etc/passwd");
22             }
23             else {
24                 $c->send_error(RC_FORBIDDEN)
25             }
26             }
27             $c->close;
28             undef($c);
29         }
30

DESCRIPTION

32       Instances of the "HTTP::Daemon" class are HTTP/1.1 servers that listen
33       on a socket for incoming requests. The "HTTP::Daemon" is a subclass of
34       "IO::Socket::IP", so you can perform socket operations directly on it
35       too.
36
37       Please note that "HTTP::Daemon" used to be a subclass of
38       "IO::Socket::INET".  To support IPv6, it switched the parent class to
39       "IO::Socket::IP" at version 6.05.  See "IPv6 SUPPORT" for details.
40
41       The accept() method will return when a connection from a client is
42       available.  The returned value will be an "HTTP::Daemon::ClientConn"
43       object which is another "IO::Socket::IP" subclass.  Calling the
44       get_request() method on this object will read data from the client and
45       return an "HTTP::Request" object.  The ClientConn object also provide
46       methods to send back various responses.
47
48       This HTTP daemon does not fork(2) for you.  Your application, i.e. the
49       user of the "HTTP::Daemon" is responsible for forking if that is
50       desirable.  Also note that the user is responsible for generating
51       responses that conform to the HTTP/1.1 protocol.
52
53       The following methods of "HTTP::Daemon" are new (or enhanced) relative
54       to the "IO::Socket::IP" base class:
55
56       $d = HTTP::Daemon->new
57       $d = HTTP::Daemon->new( %opts )
58           The constructor method takes the same arguments as the
59           "IO::Socket::IP" constructor, but unlike its base class it can also
60           be called without any arguments.  The daemon will then set up a
61           listen queue of 5 connections and allocate some random port number.
62
63           A server that wants to bind to some specific address on the
64           standard HTTP port will be constructed like this:
65
66             $d = HTTP::Daemon->new(
67                      LocalAddr => 'www.thisplace.com',
68                      LocalPort => 80,
69                  );
70
71           See IO::Socket::IP for a description of other arguments that can be
72           used to configure the daemon during construction.
73
74       $c = $d->accept
75       $c = $d->accept( $pkg )
76       ($c, $peer_addr) = $d->accept
77           This method works the same as the one provided by the base class,
78           but it returns an "HTTP::Daemon::ClientConn" reference by default.
79           If a package name is provided as argument, then the returned object
80           will be blessed into the given class.  It is probably a good idea
81           to make that class a subclass of "HTTP::Daemon::ClientConn".
82
83           The accept method will return "undef" if timeouts have been enabled
84           and no connection is made within the given time.  The timeout()
85           method is described in IO::Socket::IP.
86
87           In list context both the client object and the peer address will be
88           returned; see the description of the accept method of IO::Socket
89           for details.
90
91       $d->url
92           Returns a URL string that can be used to access the server root.
93
94       $d->product_tokens
95           Returns the name that this server will use to identify itself.
96           This is the string that is sent with the "Server" response header.
97           The main reason to have this method is that subclasses can override
98           it if they want to use another product name.
99
100           The default is the string "libwww-perl-daemon/#.##" where "#.##" is
101           replaced with the version number of this module.
102
103       The "HTTP::Daemon::ClientConn" is a subclass of "IO::Socket::IP".
104       Instances of this class are returned by the accept() method of
105       "HTTP::Daemon".  The following methods are provided:
106
107       $c->get_request
108       $c->get_request( $headers_only )
109           This method reads data from the client and turns it into an
110           "HTTP::Request" object which is returned.  It returns "undef" if
111           reading fails.  If it fails, then the "HTTP::Daemon::ClientConn"
112           object ($c) should be discarded, and you should not try to call
113           this method again on it.  The $c->reason method might give you some
114           information about why $c->get_request failed.
115
116           The get_request() method will normally not return until the whole
117           request has been received from the client.  This might not be what
118           you want if the request is an upload of a large file (and with
119           chunked transfer encoding HTTP can even support infinite request
120           messages - uploading live audio for instance).  If you pass a TRUE
121           value as the $headers_only argument, then get_request() will return
122           immediately after parsing the request headers and you are
123           responsible for reading the rest of the request content.  If you
124           are going to call $c->get_request again on the same connection you
125           better read the correct number of bytes.
126
127       $c->read_buffer
128       $c->read_buffer( $new_value )
129           Bytes read by $c->get_request, but not used are placed in the read
130           buffer.  The next time $c->get_request is called it will consume
131           the bytes in this buffer before reading more data from the network
132           connection itself.  The read buffer is invalid after
133           $c->get_request has failed.
134
135           If you handle the reading of the request content yourself you need
136           to empty this buffer before you read more and you need to place
137           unconsumed bytes here.  You also need this buffer if you implement
138           services like 101 Switching Protocols.
139
140           This method always returns the old buffer content and can
141           optionally replace the buffer content if you pass it an argument.
142
143       $c->reason
144           When $c->get_request returns "undef" you can obtain a short string
145           describing why it happened by calling $c->reason.
146
147       $c->proto_ge( $proto )
148           Return TRUE if the client announced a protocol with version number
149           greater or equal to the given argument.  The $proto argument can be
150           a string like "HTTP/1.1" or just "1.1".
151
152       $c->antique_client
153           Return TRUE if the client speaks the HTTP/0.9 protocol.  No status
154           code and no headers should be returned to such a client.  This
155           should be the same as !$c->proto_ge("HTTP/1.0").
156
157       $c->head_request
158           Return TRUE if the last request was a "HEAD" request.  No content
159           body must be generated for these requests.
160
161       $c->force_last_request
162           Make sure that $c->get_request will not try to read more requests
163           off this connection.  If you generate a response that is not self-
164           delimiting, then you should signal this fact by calling this
165           method.
166
167           This attribute is turned on automatically if the client announces
168           protocol HTTP/1.0 or worse and does not include a "Connection:
169           Keep-Alive" header.  It is also turned on automatically when
170           HTTP/1.1 or better clients send the "Connection: close" request
171           header.
172
173       $c->send_status_line
174       $c->send_status_line( $code )
175       $c->send_status_line( $code, $mess )
176       $c->send_status_line( $code, $mess, $proto )
177           Send the status line back to the client.  If $code is omitted 200
178           is assumed.  If $mess is omitted, then a message corresponding to
179           $code is inserted.  If $proto is missing the content of the
180           $HTTP::Daemon::PROTO variable is used.
181
182       $c->send_crlf
183           Send the CRLF sequence to the client.
184
185       $c->send_basic_header
186       $c->send_basic_header( $code )
187       $c->send_basic_header( $code, $mess )
188       $c->send_basic_header( $code, $mess, $proto )
189           Send the status line and the "Date:" and "Server:" headers back to
190           the client.  This header is assumed to be continued and does not
191           end with an empty CRLF line.
192
193           See the description of send_status_line() for the description of
194           the accepted arguments.
195
196       $c->send_header( $field, $value )
197       $c->send_header( $field1, $value1, $field2, $value2, ... )
198           Send one or more header lines.
199
200       $c->send_response( $res )
201           Write an "HTTP::Response" object to the client as a response.  We
202           try hard to make sure that the response is self-delimiting so that
203           the connection can stay persistent for further request/response
204           exchanges.
205
206           The content attribute of the "HTTP::Response" object can be a
207           normal string or a subroutine reference.  If it is a subroutine,
208           then whatever this callback routine returns is written back to the
209           client as the response content.  The routine will be called until
210           it returns an undefined or empty value.  If the client is HTTP/1.1
211           aware then we will use chunked transfer encoding for the response.
212
213       $c->send_redirect( $loc )
214       $c->send_redirect( $loc, $code )
215       $c->send_redirect( $loc, $code, $entity_body )
216           Send a redirect response back to the client.  The location ($loc)
217           can be an absolute or relative URL. The $code must be one of the
218           redirect status codes, and defaults to "301 Moved Permanently"
219
220       $c->send_error
221       $c->send_error( $code )
222       $c->send_error( $code, $error_message )
223           Send an error response back to the client.  If the $code is missing
224           a "Bad Request" error is reported.  The $error_message is a string
225           that is incorporated in the body of the HTML entity.
226
227       $c->send_file_response( $filename )
228           Send back a response with the specified $filename as content.  If
229           the file is a directory we try to generate an HTML index of it.
230
231       $c->send_file( $filename )
232       $c->send_file( $fd )
233           Copy the file to the client.  The file can be a string (which will
234           be interpreted as a filename) or a reference to an "IO::Handle" or
235           glob.
236
237       $c->daemon
238           Return a reference to the corresponding "HTTP::Daemon" object.
239

IPv6 SUPPORT

241       Since version 6.05, "HTTP::Daemon" is a subclass of "IO::Socket::IP"
242       rather than "IO::Socket::INET", so that it supports IPv6.
243
244       For some reasons, you may want to force "HTTP::Daemon" to listen on
245       IPv4 addresses only.  Then pass "Family" argument to
246       "HTTP::Daemon->new":
247
248         use HTTP::Daemon;
249         use Socket 'AF_INET';
250
251         my $d = HTTP::Daemon->new(Family => AF_INET);
252

SEE ALSO

254       RFC 2616
255
256       IO::Socket::IP, IO::Socket
257

SUPPORT

259       Bugs may be submitted through
260       <https://github.com/libwww-perl/HTTP-Daemon/issues>.
261
262       There is also a mailing list available for users of this distribution,
263       at <mailto:libwww@perl.org>.
264
265       There is also an irc channel available for users of this distribution,
266       at "#lwp" on "irc.perl.org" <irc://irc.perl.org/#lwp>.
267

AUTHOR

269       Gisle Aas <gisle@activestate.com>
270

CONTRIBUTORS

272       ·   Olaf Alders <olaf@wundersolutions.com>
273
274       ·   Ville Skyttä <ville.skytta@iki.fi>
275
276       ·   Mark Stosberg <MARKSTOS@cpan.org>
277
278       ·   Karen Etheridge <ether@cpan.org>
279
280       ·   Shoichi Kaji <skaji@cpan.org>
281
282       ·   Chase Whitener <capoeirab@cpan.org>
283
284       ·   Slaven Rezic <slaven@rezic.de>
285
286       ·   Zefram <zefram@fysh.org>
287
288       ·   Petr Písař <ppisar@redhat.com>
289
290       ·   Tom Hukins <tom@eborcom.com>
291
292       ·   Alexey Tourbin <at@altlinux.ru>
293
294       ·   Mike Schilli <mschilli@yahoo-inc.com>
295
296       ·   Bron Gondwana <brong@fastmail.fm>
297
298       ·   Ian Kilgore <iank@cpan.org>
299
300       ·   Jacob J <waif@chaos2.org>
301
302       ·   Ondrej Hanak <ondrej.hanak@ubs.com>
303
304       ·   Perlover <perlover@perlover.com>
305
306       ·   Peter Rabbitson <ribasushi@cpan.org>
307
308       ·   Robert Stone <talby@trap.mtview.ca.us>
309
310       ·   Rolf Grossmann <rg@progtech.net>
311
312       ·   Sean M. Burke <sburke@cpan.org>
313
314       ·   Spiros Denaxas <s.denaxas@gmail.com>
315
316       ·   Steve Hay <SteveHay@planit.com>
317
318       ·   Todd Lipcon <todd@amiestreet.com>
319
320       ·   Tony Finch <dot@dotat.at>
321
322       ·   Toru Yamaguchi <zigorou@cpan.org>
323
324       ·   Yuri Karaban <tech@askold.net>
325
326       ·   amire80 <amir.aharoni@gmail.com>
327
328       ·   jefflee <shaohua@gmail.com>
329
330       ·   john9art <john9art@yahoo.com>
331
332       ·   murphy <murphy@genome.chop.edu>
333
334       ·   phrstbrn <phrstbrn@gmail.com>
335
336       ·   ruff <ruff@ukrpost.net>
337
338       ·   Adam Kennedy <adamk@cpan.org>
339
340       ·   sasao <sasao@yugen.org>
341
342       ·   Adam Sjogren <asjo@koldfront.dk>
343
344       ·   Alex Kapranoff <ka@nadoby.ru>
345
346       ·   Andreas J. Koenig <andreas.koenig@anima.de>
347
348       ·   Bill Mann <wfmann@alum.mit.edu>
349
350       ·   DAVIDRW <davidrw@cpan.org>
351
352       ·   Daniel Hedlund <Daniel.Hedlund@eprize.com>
353
354       ·   David E. Wheeler <david@justatheory.com>
355
356       ·   FWILES <FWILES@cpan.org>
357
358       ·   Father Chrysostomos <sprout@cpan.org>
359
360       ·   Ferenc Erki <erkiferenc@gmail.com>
361
362       ·   Gavin Peters <gpeters@deepsky.com>
363
364       ·   Graeme Thompson <Graeme.Thompson@mobilecohesion.com>
365
366       ·   Hans-H. Froehlich <hfroehlich@co-de-co.de>
367
369       This software is copyright (c) 1995 by Gisle Aas.
370
371       This is free software; you can redistribute it and/or modify it under
372       the same terms as the Perl 5 programming language system itself.
373
374
375
376perl v5.32.0                      2020-07-28                   HTTP::Daemon(3)
Impressum