Re: Simple http server one-liner for some static files?
by Your Mother (Archbishop) on Oct 13, 2010 at 20:22 UTC
|
There are probably 5 ways to do that. Here's one that supports executables too:
A Tiny Web Server - Here is how you could write a simplistic web server that works with static and dynamic pages (IO::All):
perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'
Only recommended for personal use.
| [reply] [d/l] |
Re: Simple http server one-liner for some static files?
by sundialsvc4 (Abbot) on Oct 14, 2010 at 01:48 UTC
|
Yes, Python has quite a few excellent web-server programs ... and Perl has gadzillions. Just surf over to http://search.cpan.org, search for “HTTP server,” and you’ll see what I mean.
If you search instead for HTTP::Server, you’ll see some of the most readily-available packages, such as HTTP::Server::Simple and my latest personal favorite, HTTP::Server::Brick.
Each of these are very comparable to the Python package you cited. “You got a simple job to do, and you want a simple way to do it.” Done.
| |
|
Better 2 years late, than never. :)
The only problem with having gadzillions of programs is finding the right one for you. The poster was looking for this:
http_this
which didn't make the first 2 pages of results. Written 3 months earlier than the question, it's just a wrapper around the Plack::App::Directory which was suggested in another thread, but it's simpler, like the python command in a book on D3 that sent me looking for the perl equivalent of
python -m SimpleHTTPServer
perl -e 'print qq(Just another Perl Hacker\n)' # where's the irony switch?
| [reply] [d/l] |
|
Joining the "better late than never"-motto, here a (long) one-liner which—in constrast to the answers before—does not require non-core modules:
perl -MHTTP::Daemon -e '$d = HTTP::Daemon->new(LocalPort => 8000) or
+die $!; while ($c = $d->accept) { while ($r = $c->get_request) {
+$c->send_file_response(".".$r->url->path) } }'
Actually this is a flattened and slightly modified version of HTTP::Daemon's synopsis section. | [reply] [d/l] [select] |
|
|
Hi, yes, I found those -- thank you. Unfortunately, neither of those modules show in their Synopses how to use them to run an http server as a one-liner. If you know how to use either to do that, could you please share?
| [reply] |
|
It's not difficult. The "-Mxxx" option to perl loads module "xxx" and "-e" lets you supply an expression to evaluate (a command)
perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8080); $s->mount("/"=>{path=>"/tmp"}); $s->start'
This serves /tmp and its sub-directories, if you don't want that you'll want wildcard=>0 as well as the path.
| [reply] [d/l] [select] |
|
| [reply] |
Re: Simple http server one-liner for some static files?
by Your Mother (Archbishop) on Mar 21, 2016 at 12:31 UTC
|
And since this dead horse is apparently still being flogged. :P This is the one-liner I tend to use (because there are other middlewares and such that are easy to add and play with).
plackup -p 5000 -MPlack::App::Directory -e 'Plack::App::Directory->new
+({root => q{.}})->to_app'
I understand that using the tools to get a local Perl install and such are not super easy. They are not too difficult once you get the hang of them. What I would recommend if you decide it's worth the effort: local::lib, cpanm, and perlbrew (and tangentially: Plack for wsgi like Perl -> psgi).
Update: missing preposition. | [reply] [d/l] |
Re: Simple http server one-liner for some static files?
by will_ (Scribe) on Mar 02, 2016 at 13:42 UTC
|
Still looking for a one-liner that only uses core modules.
| [reply] |
|
| [reply] |
|
Because I don't want to spend time and energy configuring CPAN, accounting for the company proxy, downloading a module, finding somewhere to put it, worrying about accidentally installing files in the wrong place, making the perl command refer to that location, etc. for every temporary webserver I want to make.
While you may think all that is "easy", you can't honestly think it's as easy, fast and convenient as typing "python -m SimpleHTTPServer" or any other built-in one-liner?
| [reply] |
|
|
|