Jak wszyscy powinniśmy wiedzieć, istnieje kod statusu HTTP 418: Jestem czajnikiem .
Twoja misja, jeśli zdecydujesz się ją zaakceptować, polega na użyciu creativitea i napisaniu najmniejszego możliwego serwera, który odpowiada powyższym kodem stanu na każde wysłane do niego żądanie HTTP.
Obowiązują standardowe luki , w tym
Pobieranie żądanego wyjścia z zewnętrznego źródła
Obejmuje to wykonanie żądania HTTP w celu pobrania strony z pytaniem i wyodrębnienie rozwiązania z tej strony. To było nieco zabawne w 2011 roku, ale teraz jest pochodne i nieciekawe.
Oznacza to, że nie można po prostu przekierować żądania na inny serwer, aby zwrócił odpowiedź.
Rozwiązanie niektórych problemów związanych z funkcjonowaniem serwera:
Twój serwer może zrobić wszystko (lub nic), dopóki nie zostanie do niego wysłane żadne żądanie HTTP, o ile odpowie prawidłową odpowiedzią po wysłaniu żądania HTTP.
Odpowiedzi:
GNU Awk: 69 znaków
Sam serwer (bez końca obsługuje jedno żądanie na raz), bez użycia biblioteki.
Wyślij 418 do każdego, kto się łączy (
8269 znaków):Wyślij 418 do wszystkich, którzy coś wysyłają (
9380 znaków):Wyślij 418 do wszystkich, którzy wysyłają prawidłowe żądanie HTTP GET (
122109 znaków):źródło
netcat
,telnet
,wget
,curl
, GNU innyawk
scenariusz ... Teoretycznie nasłuchuje na localhost: 80, ale w tym 1) Nie ma serwera WWW, Skype lub inny program powinien używać portu 80; 2) musisz być superużytkownikiem, aby otwierać porty poniżej 1024. Więc do testowania łatwiej jest edytować numer portu w skrypcie na coś takiego jak 8080 (s="/inet/tcp/8080/0/0"
), a następnie połączyć się z tym. pastebin.com/zauP7LMABash (33)
źródło
\0
linię lub na końcu pliku - możesztruncate
to zrobić i nadal działa.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
daje 33 dla mnie$PATH
katalogów lub że jest wywoływany ze ścieżką (rekursja przez$0
). ----- 2. HTTP wymaga, aby linie były kończone\r\n
nie tylko\n
. Tutaj powinien być ciąg$"HTTP/1.1 418\r\n\r"
(forma czytelniejsza). ------ Wreszcie: skrypt może być krótszy:-q1
parametr nie jest konieczny.echo
wariant nie działa (przynajmniej Firefox nie rozpozna go jako 418). Jednak\r
nie są potrzebne. Specyfikacja mówi, że tak powinno być\r\n\r\n
, ale przynajmniej Firefox i Chrome zaakceptują\n\n
, więc wydaje się, że w duchu golfa ich nie ma. Ten-q1
parametr był konieczny w moim systemie, ponieważ przeglądarka sama nie zamknie połączenia.$0
działa dobrze, jeśli skrypt jest wykonywalny i wywoływany w ten sposób.wget
którym wydaje się być w porządku tylko z jedną nową liniąPHP - 85 bajtów
Zapisane z zakończeniami linii w stylu Windows (CR-LF), wymaga
php_sockets
włączenia.Użyłem tego jako mojego kodu błędu w Hard Code Golf: Utwórz wyzwanie na czacie , ale nikt tego nie zauważył.
Wersja przyjazna dla przeglądarki
Uruchom skrypt w CLI i skieruj przeglądarkę na
http://localhost
.źródło
I'm a teapot
:-)Node.js (LiveScript)
http
moduł - 66Zainspirowany odpowiedzią Qwertiy .
net
moduł - 76źródło
Ruby + Rack, 19 bajtów
Należy zapisać jako
config.ru
i uruchomić zrackup
poleceniem.Lub jeśli wolisz „czysty” Ruby:
42 bajty +
-rrack
flaga = 48 bajtówźródło
Ogólne polecenia Bash + BSD, 29
Pożyczając trochę od innych odpowiedzi:
Działa dla mnie z
wget
.Pierwsza odpowiedź do użycia
nc
, 38Przyjmuję uprawnienia roota - uruchom w następujący sposób:
źródło
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
przełącznika :) Testowałem kod w Firefoksie i bez dwóch nowych linii kod statusu nie jest rozpoznawany.Ruby (polecenie systemowe nc) - 35
DigitalTrauma powinna docenić pomysł użycia
nc
, jednak Ruby może wykonać nieskończoną pętlę z mniejszą liczbą znaków niż Bash :)Ruby (TCPServer) - 75
Ta nowa linia jest zamierzona - rzeczywisty znak nowej linii jest o jeden znak krótszy niż „\ n”.
Ruby (WEBrick HTTPServer) - 87
źródło
Node.js, 80
Odpowiedź brzmi:
źródło
Python 3 106
źródło
from socket import*;s=socket(AF_INET,SOCK_STREAM)
jest krótszy.while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- chyba że coś przeoczyłem. (Nawiasem mówiąc, nie krępuj się liczyć nowego wiersza pojedynczych znaków, jak pozwala na to język. W ten sposób nic nie tracisz, oddzielając polecenia;
s=socket(2,1)
(przynajmniej takie są ich wartości w moim systemie Linux).listen()
parametru, że „maksymalna wartość zależy od systemu (zwykle 5)”. Zamiast 10, 9 to więcej, a 1 postać jest krótsza. I zamiastbytes('HTTP/1.1 418\n','UTF8')
literałub'HTTP/1.1 418\n'
wystarczy. Lub jeślib
stworzysz kod Python 2, to bytesprefix nie jest już potrzebny. I krótszysend()
też wydaje się wystarczający.Haskell - 142 bajty
źródło
Tcl (> = 8,5), 78 bajtów
Edycja - dodany w dodatkowym nowym wierszu (łącznie 2 nowe wiersze) ze względu na zgodność.
źródło
Julia:
8673 znakówźródło
PowerShell, 398
258
źródło
R, 80 znaków
Nigdy wcześniej nie programowałem w gniazdach za pomocą R, ale spróbuję:
Tutaj
socketConnection
otwiera się gniazdo: pierwszym argumentem powinien być host, domyślnielocalhost
możemy to pominąć tutaj; drugi argument to port, który nie ma wartości domyślnej, a następnie argument,server
gdy jest określony,TRUE
tworzy gniazdo, jeśliFALSE
po prostu łączy się z istniejącym.T
jest domyślnie równeTRUE
R.Edycja: Jak sugeruje sugerowana edycja @AlexBrown, można ją skrócić do 69 znaków :
źródło
Node.js koa , 61 bajtów
Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:
Wymaga węzła v0.11.12 +
Uruchom jako:
źródło
function*
?Shell + socat, 60
źródło
echo -e HTTP/1.1 418 T\r\n\r
jest krótszy.\\ T
nawet nie jest potrzebne.MATLAB,
9786 bajtówNie jest to poważny konkurent pod względem całkowitej liczby bajtów, ale chciałbym to opublikować, ponieważ nie sądziłem, że można napisać w pełni funkcjonalny serwer WWW za pomocą narzędzia matematycznego. Zwróć uwagę na użycie skrótu własności :
'Ne','s'
wewnętrznie rozwija się do'NetworkRole', 'server'
.źródło
Możesz to zrobić przy minimalnym wysiłku, używając
.htaccess
pliku i php.Wszystkie dostępy do twojego serwera zwrócą status 418.
Poniżej znajduje się kod:
.htaccess (28 bajtów)
PHP (
3819 bajtów)Dzięki @primo za uratowanie mi kilku bajtów!
Przetestowałem to i potwierdzam, że zwraca pożądany wynik!
Nawiasem mówiąc, „Pedido” oznacza „Zapytanie”, a „Resposta” oznacza „Odpowiedź”.
źródło
node.js z CoffeeScript (76)
Wystarczy skompilować go w JavaScript, a następnie trzeba uruchomić
npm install connect
. Następnie zacznij odnode server.js
źródło
nginx - 35
Rzuć to w nginx.conf, uruchom nginx.
Nie jestem pewien, czy wykorzystuje to standardowe luki „Używanie wbudowanych funkcji do wykonywania pracy” lub „Zbyt dosłowna interpretacja wyzwania”. Ups, wygląda na to, że OP nie spodoba się ta odpowiedź.
źródło
;
?Perl, 78
uruchomić jako
plackup whatever.pl
.źródło
sub{[418,[],[]]}
powinno wystarczyć. (16 znaków)Python 2.7 / Django, 94 bajty
(dodany z domyślnej płyty głównej z
django-admin.py startproject
) W urls.py:źródło
C # + OWIN
251240Naprawdę miałem nadzieję, że będzie krótszy, ale długie przestrzenie nazw zrujnowały ten plan. Wymaga
Microsoft.Owin.SelfHost
pakietu dostępnego w NuGet.źródło
node.js with connect (78)
npm install connect
Najpierw musisz biec . Następnie zacznij odnode server.js
źródło
Idź, 162 bajty
źródło
Współczynnik,
101141 bajtówZwróć 418 wszystkim, którzy się łączą.
źródło
Java 7, 208 bajtów
To pytanie wymagało odpowiedzi w języku Java.
źródło