Comme nous devrions tous le savoir, il existe un code de statut HTTP 418: je suis une théière .
Votre mission, si vous l'acceptez, consiste à utiliser votre création et à écrire le plus petit serveur possible qui répond avec le code d'état ci-dessus à toute requête HTTP qui lui est adressée.
Des failles standard s'appliquent, notamment
Récupérer la sortie désirée d'une source externe
Cela inclut une requête HTTP pour extraire la page avec la question et extraire une solution de cette page. C'était assez amusant en 2011, mais maintenant c'est dérivé et sans intérêt.
Cela signifie que vous ne pouvez pas simplement rediriger la demande vers un autre serveur pour qu'il renvoie la réponse.
Remédier à une certaine confusion au sujet des fonctionnalités du serveur:
votre serveur peut faire n'importe quoi (ou rien) sans qu'aucune requête HTTP ne lui soit adressée tant qu'il répond avec la réponse correcte une fois qu'une requête HTTP est effectuée.
Réponses:
GNU Awk: 69 caractères
Un serveur lui-même (sert indéfiniment une requête à la fois), aucune bibliothèque utilisée.
Envoyez 418 à toutes les personnes qui se connectent (
8269 caractères):Envoyez 418 à tous ceux qui envoient quelque chose (
9380 caractères):Envoyez 418 à tous ceux qui envoient une requête HTTP GET valide (
122109 caractères):la source
netcat
,telnet
,wget
,curl
, un autre GNUawk
script ... En théorie , il écoute sur localhost: 80, mais pour que 1) aucun serveur web, Skype ou tout autre programme devrait utiliser le port 80; 2) vous devez être super utilisateur pour ouvrir les ports inférieurs à 1024. Ainsi, pour les tests, il est plus facile de modifier le numéro de port dans le script à quelque chose comme 8080 (s="/inet/tcp/8080/0/0"
), puis de vous y connecter. pastebin.com/zauP7LMABash (33)
la source
\0
à la fin de votre fichier - vous pouvez le fairetruncate
et cela fonctionne toujours.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
donne 33 pour moi$PATH
répertoires ou appelé avec un chemin (récursion par$0
). ----- 2. HTTP exige que les lignes soient terminées par\r\n
non seulement\n
. Ici, la chaîne devrait être$"HTTP/1.1 418\r\n\r"
(forme plus lisible). ------ Et enfin: le script pourrait être plus court: le-q1
paramètre n'est pas nécessaire.echo
variante ne fonctionne pas (au moins, Firefox ne le reconnaîtra pas comme un 418). Cependant, les\r
s ne sont pas nécessaires. La spécification dit que cela devrait être le cas\r\n\r\n
, mais au moins Firefox et Chrome l'accepteront\n\n
. Il semble donc que le golfeur n'a pas à les inclure. Le-q1
paramètre était nécessaire sur mon système, car le navigateur ne fermera pas la connexion par lui-même.$0
fonctionne bien si le script est rendu exécutable et appelé de cette manière.wget
ce qui semble aller avec juste une nouvelle lignePHP - 85 octets
Enregistré avec des fins de ligne de style Windows (CR-LF), requiert
php_sockets
activé.En fait, je l'ai utilisé comme code d'erreur pour Hard Code Golf: créer un défi Chatroom , mais personne ne s'en est aperçu.
Version conviviale pour le navigateur
Lancez le script dans la CLI et pointez votre navigateur sur
http://localhost
.la source
I'm a teapot
:-)Node.js (LiveScript)
http
module - 66Inspiré par la réponse de Qwertiy .
net
module - 76la source
Ruby + Rack, 19 octets
Doit être enregistré en tant que
config.ru
et exécuté avec larackup
commande.Ou si vous préférez "pur" Ruby:
42 octets +
-rrack
drapeau = 48 octetsla source
Commandes générales Bash + BSD, 29
Revenons un peu aux autres réponses:
Travaille pour moi avec
wget
.Première réponse à utiliser
nc
, 38J'assume les privilèges root - fonctionne comme suit:
la source
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
commutateur :) J'ai testé le code avec Firefox et sans deux nouvelles lignes, le code d'état n'est pas reconnu.Ruby (commande système nc) - 35
DigitalTrauma devrait avoir le mérite d'utiliser l'idée
nc
, mais Ruby peut créer une boucle infinie avec moins de caractères que Bash :)Ruby (Serveur TCPS) - 75
Cette nouvelle ligne est intentionnelle - le caractère de nouvelle ligne actuel est inférieur à "\ n" d'un caractère.
Ruby (WEBrick HTTPServer) - 87
la source
Node.js, 80
La réponse est
la source
Python 3 106
la source
from socket import*;s=socket(AF_INET,SOCK_STREAM)
while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- sauf si j'ai raté quelque chose. (Au fait, sentez-vous libre de compter les sauts de ligne d'un seul caractère, comme le permet la langue. Ainsi, vous ne perdez rien en séparant les commandes par des sauts de ligne au lieu de;
.)s=socket(2,1)
(au moins, ce sont leurs valeurs sur mon Linux).listen()
le paramètre de s que «la valeur maximale dépend du système (généralement 5)». Donc au lieu de 10, 9 est plus que suffisant et 1 caractère plus court. Et au lieu d'bytes('HTTP/1.1 418\n','UTF8')
un littéralb'HTTP/1.1 418\n'
suffit. Ou si vous créez le code Python 2, leb
préfixe d'octet n'est plus nécessaire. Et le plus courtsend()
semble aussi suffire.Haskell - 142 octets
la source
Tcl (> = 8.5), 78 octets
Edit - ajouté dans une nouvelle ligne (total de 2 nouvelles lignes) pour des raisons de conformité.
la source
Julia:
8673 caractèresla source
Powershell, 398
258
la source
R, 80 caractères
Jamais la programmation de socket avec R n'avait été faite auparavant, mais je vais essayer:
Ici
socketConnection
s'ouvre un socket: le premier argument devrait être l'hôte, le défaut étant de lelocalhost
sauter ici; le deuxième argument est le port qui n'a pas de valeur par défaut, puis l'argument,server
lorsqu'il est spécifié,TRUE
crée le socket, s'ilFALSE
ne se connecte qu'à un existant.T
est, par défaut, égal àTRUE
, dans R.Édition: comme suggéré dans une modification suggérée par @AlexBrown, cela pourrait être raccourci en 69 caractères :
la source
Node.js koa , 61 octets
Réponse:
Requiert le noeud v0.11.12 +
Courir comme:
la source
function*
?Shell + socat, 60 ans
la source
echo -e HTTP/1.1 418 T\r\n\r
est plus courte.\\ T
n'est même pas nécessaire.MATLAB,
9786 octetsPas vraiment sérieux en termes de nombre absolu d'octets, mais j'aimerais le poster car je ne pensais pas qu'il serait possible d'écrire un serveur Web entièrement fonctionnel à l'aide d'un outil mathématique. Notez l'utilisation de raccourcissement de propriété :
'Ne','s'
étend en interne à'NetworkRole', 'server'
.la source
Vous pouvez le faire avec un effort minimal en utilisant un
.htaccess
fichier et php.Tous les accès à votre serveur renverront le statut 418.
Ci-dessous le code:
.htaccess (28 bytes)
PHP (
3819 octets)Merci à @primo de m'avoir économisé de nombreux octets!
J'ai testé cela et confirme qu'il renvoie le résultat souhaité!
À propos, "Pedido" signifie "Demande" et "Resposta" signifie "Réponse".
la source
node.js avec CoffeeScript (76)
Il suffit de le compiler en JavaScript, vous devez alors exécuter
npm install connect
. Après cela, commencez avecnode server.js
la source
nginx - 35
Jetez cela dans nginx.conf, lancez nginx.
Vous ne savez pas si cela utilise les échappatoires standard «Utilisation de fonctions intégrées pour effectuer le travail» ou «Interprétation trop littérale du défi». Oups, on dirait que OP ne va pas aimer cette réponse.
la source
;
?Perl, 78
courir comme
plackup whatever.pl
.la source
sub{[418,[],[]]}
devrait suffire. (16 caractères.)Python 2.7 / Django, 94 octets
(ajouté à partir de boilerplate par défaut de
django-admin.py startproject
) Dans urls.py:la source
C # + OWIN
251240J'espérais vraiment qu'il serait plus court, mais les longs espaces de noms ont ruiné ce plan. Requiert le
Microsoft.Owin.SelfHost
paquet disponible sur NuGet.la source
node.js avec connect (78)
Vous devez courir en
npm install connect
premier. Puis commencez avecnode server.js
la source
Go, 162 octets
la source
Facteur,
101141 octetsRetournez 418 à tous ceux qui se connectent.
la source
Java 7, 208 octets
Cette question avait besoin d'une réponse java.
la source