Hi,
I'm making a web server in perl, mainly because with Apache it's not possible to execute commands in perl scripts which need root access (except running apache as root which is bad).
Here's what i've got so far:
Code
!/usr/bin/perl
print "Content-Type:text/html\n\n";
use IO::Socket;
$sock = new IO::Socket::INET (LocalHost => '66.199.241.106',
LocalPort => 7070,
Proto => 'tcp',
Listen => 100,
Reuse => 1
);
die "Socket could not be created. Reason: $!" unless $sock;
print "Socket Created.\n";
while ($new_sock = $sock->accept()) {
print "Incoming connection...\n";
$data = <$new_sock>;
if($data=~/GET/){ @split=split /GET /,$buf; }
if($data=~/POST/){ @split=split /POST /,$buf; }
@split2=split /HTTP/, $split[1];
$file=$split2[0];
print "Request was for $file\n";
if($file =~ /.cgi/) { @msg=`perl $file`; }
else {
open FILE, "$file";
@contents=<FILE>;
close FILE;
}
foreach $msg (@msg)
{
$new_sock->send($msg) or print "Not sent";
print "Sent $msg\n";
}
}
OK, this is great for simple pages, and it can even display 'static' .cgi pages.
However, since the whole purpose of this mini web server is to serve CGI pages to manage the server, it needs to do a bit more.
I've discovered that the Perl pages, which work on Apache won't do the things i want them to do on my mini server:
1. Read Cookies
2. ENV Variables
3. Get inputs using CGI->Param();
Is there some module perhaps i can use to call my perl scripts (instead of just using backticks to run via the command line?).
I understand that i will need to write something equivilent to the apache 'mod_cgi' to get it to work.
Or maybe you could suggest another webserver that is simple, but it must have good support for CGI files.
I've tried PerlWebserver 0.4, but it only works on domains, and i want to really be able to go anywhere on my server, and just type :9090 to get to my scripts, like Apache does. It also seems to have a tendency to die after serving about 5 pages.
Thanks in advance,
Andrew
I'm making a web server in perl, mainly because with Apache it's not possible to execute commands in perl scripts which need root access (except running apache as root which is bad).
Here's what i've got so far:
Code
!/usr/bin/perl
print "Content-Type:text/html\n\n";
use IO::Socket;
$sock = new IO::Socket::INET (LocalHost => '66.199.241.106',
LocalPort => 7070,
Proto => 'tcp',
Listen => 100,
Reuse => 1
);
die "Socket could not be created. Reason: $!" unless $sock;
print "Socket Created.\n";
while ($new_sock = $sock->accept()) {
print "Incoming connection...\n";
$data = <$new_sock>;
if($data=~/GET/){ @split=split /GET /,$buf; }
if($data=~/POST/){ @split=split /POST /,$buf; }
@split2=split /HTTP/, $split[1];
$file=$split2[0];
print "Request was for $file\n";
if($file =~ /.cgi/) { @msg=`perl $file`; }
else {
open FILE, "$file";
@contents=<FILE>;
close FILE;
}
foreach $msg (@msg)
{
$new_sock->send($msg) or print "Not sent";
print "Sent $msg\n";
}
}
OK, this is great for simple pages, and it can even display 'static' .cgi pages.
However, since the whole purpose of this mini web server is to serve CGI pages to manage the server, it needs to do a bit more.
I've discovered that the Perl pages, which work on Apache won't do the things i want them to do on my mini server:
1. Read Cookies
2. ENV Variables
3. Get inputs using CGI->Param();
Is there some module perhaps i can use to call my perl scripts (instead of just using backticks to run via the command line?).
I understand that i will need to write something equivilent to the apache 'mod_cgi' to get it to work.
Or maybe you could suggest another webserver that is simple, but it must have good support for CGI files.
I've tried PerlWebserver 0.4, but it only works on domains, and i want to really be able to go anywhere on my server, and just type :9090 to get to my scripts, like Apache does. It also seems to have a tendency to die after serving about 5 pages.
Thanks in advance,
Andrew