Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Simple http server one-liner for some static files?

by Anonymous Monk
on Oct 13, 2010 at 20:08 UTC ( #865148=perlquestion: print w/ replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Anyone know of a one-liner I can use to serve some static docs via http over some high-numbered port?

In Python I can do:

python -m SimpleHTTPServer $portnum > ~/temp/little-web-server.log 2>& +1 &

(serves documents in the cwd where it was run)

Is there an equivalent for that in Perl?

Comment on Simple http server one-liner for some static files?
Download Code
Replies are listed 'Best First'.
Re: Simple http server one-liner for some static files?
by Your Mother (Chancellor) 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.

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.

      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?

        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.

        stick with what works
      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?
        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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://865148]
Approved by Corion
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (10)
As of 2015-07-31 05:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (274 votes), past polls