простой web-сервер: 19 строк на bash

shlyumper


#!/bin/bash
# web.sh — http://localhost:9000/hello?world
RESP=/tmp/webresp
[ -p $RESP ] || mkfifo $RESP
while true ; do
( cat $RESP ) | nc -l 9000 | sed -ue 's/\r//g' | (
REQ=`while read L && [ -n "$L" ] ; do echo "$L" ; done`
echo "[`date '+%Y-%m-%d %H:%M:%S'`] $REQ" | head -1
cat >$RESP <<EOF
HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/plain
Server: bash/2.0
Connection: Close
Content-Length: ${#REQ}
$REQ
EOF
)
done

bleyman

 
HttpListener listener = new HttpListener;
listener.Start;
while (true)
{
HttpListenerResponse response = listener.GetContext.Response;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("<HTML><BODY> Hello world!</BODY></HTML>");
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
response.OutputStream.Close;
}

11 строк, считая скобки. So what?
19 - 7 = 12, если кто-то вдруг решит придраться к процессу вывода.

vall

это читерство, в таком случае строчку на баше запускающую апач тоже можно считать HTTP сервером.

kokoc88

это читерство, в таком случае строчку на баше запускающую апач тоже можно считать HTTP сервером.
Да? А cat, sed, и иже с ними - не читерство?

Ivan8209

Сколько ты проживёшь в отсутствие libc или её аналога?
---
...Я работаю антинаучным аферистом...

Olenenok

это что за язык? C#?

FRider

да

Olenenok

завтра на питоне сделаю

FRider

да ты просто герой. Хоть на асме сделай.

Ivan8209

Gforth содержит http-сервер в библиотеке, можно сказать:

require httpd.fs

и он уже здесь.
Остаётся чуть-чуть доделать:

faucet http-alt --in --out gforth -e 'require httpd.fs s" /var/www/" documentroot $! s" /var/www/" htmldir $! :noname &100 httpd bye ; execute' &

---
VARIABLE 1

Ivan8209

> Хоть на асме сделай.
Всё уже украдено до нас.
Даже ссылку лень искать.
---
...Я работаю антинаучным аферистом...

Olenenok


import BaseHTTPServer
class _handl (BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET (self):
self.wfile.write (u"<html><head><title> .... </title></head></html>")
httpserver = BaseHTTPServer.HTTPServer "",80 _handl)
httpserver.serve_forever

nikita270601

Кавычку-то закрой.
Оставить комментарий
Имя или ник:
Комментарий: