четверг, 13 сентября 2012 г.

Простой HTTP сервер на perl

Сегодня нужно было проверить скорость HTTP соединения на сервере без использования установленного там Apachе (были подозрения, что скорость HTTP соединений ограничивал либо сам Apache, либо внешний шейпер).

Немного погуглил и нашел простенький скрипт написанный на perl, который только отдает один файл на заранее определенный запрос.

#!/usr/bin/env perl

use HTTP::Daemon;
use HTTP::Status;

my $d = new HTTP::Daemon
            LocalAddr   => '0.0.0.0',
            LocalPort   => '8080';
print "Please contact me at: url, ">\n";
while (my $c = $d->accept) {
    while (my $r = $c->get_request) {
        if ($r->method eq 'GET' and $r->url->path eq "/speed-test") {
            $c->send_file_response("/tmp/test.bin");
        } else {
            $c->send_error(RC_FORBIDDEN)
        }
    }
    $c->close;
    undef($c);
}

В этом варианте скрипт начинает слушать порт 8080 на всех доступных интерфейсах и отдает файл /tmp/test.bin на запрос "GET /speed-test HTTP/1.0". Ну или можно открыть в браузере ссылку http://server-ip:8080/speed-test

3 комментария:

  1. Анонимный19 мая 2013 г., 19:23

    Было бы проще без антикидди :)

    ОтветитьУдалить
  2. Анонимный19 мая 2013 г., 19:24

    #!/usr/local/bin/perl

    use HTTP::Daemon;

    use HTTP::Status;

    my $d = HTTP::Daemon->new(Timeout => 15) || die;

    print "Please contact me at: url, ">\n";

    while (my $c = $d->accept) {
    $r = $c->get_request;
    if ($r) {
    $c->send_basic_header;
    $c->print("Content-Type: text/plain");
    $c->send_crlf;
    $c->send_crlf;
    $c->print("Ok\n");

    }
    $c->close;
    undef($c);
    }

    ОтветитьУдалить
    Ответы
    1. У меня была задача протестировать скорость HTTP подключения.

      Удалить