Как вернуть JSON в мини-веб-сервер без каких-либо дополнительных модулей? - PullRequest
1 голос
/ 20 сентября 2019

Так что моя проблема в том, что у меня установлена ​​perl5.8, и я не могу установить дополнительный модуль.(Я являюсь государственным служащим, и я должен использовать серверы без каких-либо прав на них или выбирать то, что я могу на нем установить, процесс изменения чего-либо занимает годы).

Так что есть немногоскрипт веб-сервера:

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

(my $d = new HTTP::Daemon 
LocalAddr => '127.0.0.1',
LocalPort => 52443
) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
    while (my $r = $c->get_request) {
        if ($r->method eq 'GET' and $r->uri->path eq "/xyzzy") {
            # remember, this is *not* recommended practice :-)
            $c->send_file_response("D:/Script/index.html");
        }
        else {
            $c->send_error(RC_FORBIDDEN)
        }
    }
    $c->close;
    undef($c);
}

И я хотел бы вернуть json, как: {"Status": "Ok"}

regards

1 Ответ

1 голос
/ 20 сентября 2019

Переписав пример в документации , чтобы вернуть JSON, выглядело бы примерно так:

#!/usr/bin/perl

use strict;
use warnings;

use HTTP::Daemon;
use HTTP::Status;
use HTTP::Response;
use HTTP::Headers;
use JSON::PP;

my $headers = HTTP::Headers->new;
$headers->header(Content_Type => 'application/json');
my $content = JSON::PP->new->utf8->encode({ Status => 'Ok' });

my $d = HTTP::Daemon->new || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
    while (my $r = $c->get_request) {
        if ($r->method eq 'GET' and $r->uri->path eq "/xyzzy") {
            $c->send_response(
                HTTP::Response->new(200, 'OK', $headers, $content)
            );
        }
        else {
            $c->send_error(RC_FORBIDDEN)
        }
    }
    $c->close;
    undef($c);
}

Но учтите, что написание веб-приложения на этом уровне редко бывает полезноделать.Вы действительно хотите установить веб-фреймворк (мне нравится Dancer2 ), поскольку это сделает вашу жизнь намного проще.

Я не уверен, что накладывает на вас эти ограничения.Но если вы не используете современную версию Perl (по крайней мере, 5.10) и не устанавливаете модули из CPAN, то вы делаете свою карьеру в Perl намного сложнее, чем нужно.

...