Como todos deberíamos saber, hay un código de estado HTTP 418: soy una tetera .
Su misión, si elige aceptarla, es utilizar su creatividad y escribir el servidor más pequeño posible que responda con el código de estado anterior a todas y cada una de las solicitudes HTTP que se le hagan.
Se aplican lagunas estándar , que incluyen
Obteniendo la salida deseada de una fuente externa
Esto incluye hacer una solicitud HTTP para buscar la página con la pregunta y extraer una solución de esa página. Esto fue ligeramente divertido en 2011, pero ahora es derivado y poco interesante.
Lo que significa que no puede simplemente redirigir la solicitud a otro servidor para que devuelva la respuesta.
Abordar cierta confusión sobre la funcionalidad del servidor:
su servidor puede hacer cualquier cosa (o nada) mientras no se realiza una solicitud HTTP, siempre que responda con la respuesta correcta una vez que se realiza una solicitud HTTP.
Respuestas:
GNU Awk: 69 caracteres
Un servidor en sí mismo (atiende sin cesar una solicitud a la vez), no se utiliza biblioteca.
Enviar 418 a todos los que se conectan (
8269 caracteres):Enviar 418 a todos los que envían algo (
9380 caracteres):Envíe 418 a todos los que envíen una solicitud HTTP GET válida (
122109 caracteres):fuente
netcat
,telnet
,wget
,curl
, otro GNUawk
guión, ... En teoría se escucha en localhost: 80, pero para que 1) no hay un servidor web, Skype u otro programa debe utilizar el puerto 80; 2) tienes que ser superusuario para abrir puertos por debajo de 1024. Por lo tanto, para probar es más fácil editar el número de puerto en el script a algo como 8080 (s="/inet/tcp/8080/0/0"
) y luego conectarte a eso. pastebin.com/zauP7LMAGolpe (33)
fuente
\0
al final de su archivo, puedetruncate
hacerlo y aún funciona.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
da 33 para mí$PATH
directorios o que se llame con una ruta (recursividad por$0
). ----- 2. HTTP requiere que las líneas terminen\r\n
no solo\n
. Aquí la cadena debe ser$"HTTP/1.1 418\r\n\r"
(forma legible más larga). ------ Y finalmente: el script podría ser más corto: el-q1
parámetro no es necesario.echo
variante no funciona (al menos Firefox no la reconocerá como un 418). Sin embargo, los\r
s no son necesarios. La especificación dice que debería ser\r\n\r\n
, pero al menos Firefox y Chrome aceptarán\n\n
, por lo que parece estar en el espíritu del golf no incluirlos. El-q1
parámetro era necesario en mi sistema, porque el navegador no cerrará la conexión por sí mismo.$0
funciona bien si el script se hace ejecutable y se llama de esa manera.wget
que parece estar bien con solo una nueva líneaPHP - 85 bytes
Guardado con terminaciones de línea estilo Windows (CR-LF), requiere
php_sockets
habilitado.De hecho, usé esto como mi código de error para Hard Code Golf: crear un desafío de sala de chat , pero nadie se dio cuenta.
Versión amigable para el navegador
Inicie el script en la CLI y apunte su navegador a
http://localhost
.fuente
I'm a teapot
:-)Node.js (LiveScript)
http
módulo - 66Inspirado por la respuesta de Qwertiy .
net
módulo - 76fuente
Ruby + Rack, 19 bytes
Debe guardarse como
config.ru
y ejecutarse con elrackup
comando.O si prefieres Ruby "puro":
42 bytes +
-rrack
bandera = 48 bytesfuente
Comandos generales de Bash + BSD, 29
Recurriendo un poco a otras respuestas:
Funciona para mí con
wget
.Primera respuesta al uso
nc
, 38Asumo privilegios de root: ejecute lo siguiente:
fuente
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
usaste el interruptor :) Probé el código con Firefox y sin dos líneas nuevas no se reconoce el código de estado.Ruby (comando del sistema nc) - 35
DigitalTrauma debería obtener el crédito por la idea de usar
nc
, sin embargo, Ruby puede hacer un ciclo infinito con menos caracteres que Bash :)Rubí (TCPServer) - 75
Esa nueva línea es intencional: el carácter de nueva línea real es un carácter más corto que "\ n".
Rubí (WEBrick HTTPServer) - 87
fuente
Node.js, 80
La respuesta es
fuente
Python 3 106
fuente
from socket import*;s=socket(AF_INET,SOCK_STREAM)
while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- A menos que me haya perdido algo. (Por cierto, no dude en contar con nuevas líneas de una sola personajes, como el lenguaje les permite esa manera usted no pierde nada con la separación de los comandos por saltos de línea en lugar de.;
.)s=socket(2,1)
(al menos esos son sus valores en mi Linux).listen()
el parámetro de que "el valor máximo depende del sistema (generalmente 5)". Entonces, en lugar de 10, 9 es más que suficiente y 1 personaje más corto. Y en lugar debytes('HTTP/1.1 418\n','UTF8')
un literalb'HTTP/1.1 418\n'
es suficiente. O sib
crea el código Python 2, entonces el prefijo de bytes ya no es necesario. Y el más cortosend()
también parece ser suficiente.Haskell - 142 bytes
fuente
Tcl (> = 8.5), 78 bytes
Editar: agregado en una nueva línea adicional (un total de 2 nuevas líneas) en aras del cumplimiento.
fuente
Julia:
8673 caracteresfuente
Powershell, 398
258
fuente
R, 80 caracteres
Nunca hice programación de sockets con R antes, pero lo intentaré:
Aquí se
socketConnection
abre un socket: el primer argumento debe ser el host, el valor predeterminado eslocalhost
que podemos omitirlo aquí; el segundo argumento es el puerto que no tiene valor predeterminado, luego el argumentoserver
cuando se especificaTRUE
crea el socket, siFALSE
solo se conecta a uno existente.T
es, por defecto, igual aTRUE
, en R.Editar: como se sugiere en una edición sugerida por @AlexBrown, esto podría acortarse en 69 caracteres :
fuente
Node.js koa , 61 Bytes
Respuesta:
Requiere el nodo v0.11.12 +
Correr como:
fuente
function*
?Shell + socat, 60
fuente
echo -e HTTP/1.1 418 T\r\n\r
Es más corto.\\ T
ni siquiera es necesario.MATLAB,
9786 bytesNo es realmente un contendiente serio en términos de conteo absoluto de bytes, pero me gustaría publicarlo porque no pensé que fuera posible escribir un servidor web completamente funcional usando una herramienta matemática. Tenga en cuenta el uso del acortamiento de propiedades : se
'Ne','s'
expande internamente a'NetworkRole', 'server'
.fuente
Puede hacer esto con un mínimo esfuerzo utilizando un
.htaccess
archivo y php.Todos los accesos a su servidor devolverán el estado 418.
Debajo está el código:
.htaccess (28 bytes)
PHP (
3819 bytes)¡Gracias a @primo por salvarme un montón de bytes!
¡He probado esto y confirmo que devuelve el resultado deseado!
Por cierto, "Pedido" significa "Solicitud" y "Resposta" significa "Respuesta".
fuente
node.js con CoffeeScript (76)
Simplemente compílelo en JavaScript, luego debe ejecutarlo
npm install connect
. Después de eso comienza connode server.js
fuente
nginx - 35
Tíralo en nginx.conf, inicia nginx.
No estoy seguro si esto usa lagunas estándar "Usar funciones integradas para hacer el trabajo" o "Interpretar el desafío demasiado literalmente". Vaya, parece que a OP no le gustará esta respuesta.
fuente
;
?Perl, 78
correr como
plackup whatever.pl
.fuente
sub{[418,[],[]]}
debería ser suficiente. (16 caracteres.)Python 2.7 / Django, 94 bytes
(agregado de la plantilla predeterminada de
django-admin.py startproject
) En urls.py:fuente
C # + OWIN
251240Realmente esperaba que fuera más corto, pero los largos espacios de nombres arruinaron ese plan. Requiere el
Microsoft.Owin.SelfHost
paquete disponible en NuGet.fuente
node.js con connect (78)
Necesitas correr
npm install connect
primero. Entonces comience connode server.js
fuente
Go, 162 bytes
fuente
Factor,
101141 bytesRegrese 418 a todos los que se conectan.
fuente
Java 7, 208 bytes
Esta pregunta necesitaba una respuesta de Java.
fuente