Como todos sabemos, existe um código de status HTTP 418: sou um bule de chá .
Sua missão, se você optar por aceitá-la, é usar sua capacidade criativa e escrever o menor servidor possível que responda com o código de status acima a toda e qualquer solicitação HTTP feita a ele.
Aplicam-se brechas padrão , incluindo
Buscando a saída desejada de uma fonte externa
Isso inclui fazer uma solicitação HTTP para buscar a página com a pergunta e extrair uma solução dessa página. Isso foi levemente divertido em 2011, mas agora é derivado e desinteressante.
Significando que você não pode simplesmente redirecionar a solicitação para outro servidor para que ela retorne a resposta.
Resolvendo alguma confusão sobre a funcionalidade do servidor:
Seu servidor pode fazer qualquer coisa (ou nada) enquanto nenhuma solicitação HTTP for feita, desde que responda com a resposta correta assim que uma solicitação HTTP for feita.
Respostas:
GNU Awk: 69 caracteres
Um servidor em si (serve infinitamente uma solicitação por vez), nenhuma biblioteca usada.
Envie 418 para todos que se conectarem (
8269 caracteres):Envie 418 para todos que enviarem algo (
9380 caracteres):Envie 418 para todos que enviarem uma solicitação HTTP GET válida (
122109 caracteres):fonte
netcat
,telnet
,wget
,curl
, outro GNUawk
roteiro, ... Teoricamente ele escuta em localhost: 80, mas para que 1) nenhum servidor web, Skype ou outro programa deve utilizar a porta 80; 2) você precisa ser superusuário para abrir portas abaixo de 1024. Portanto, para testar é mais fácil editar o número da porta no script para algo como 8080 (s="/inet/tcp/8080/0/0"
) e conectar-se a isso. pastebin.com/zauP7LMABash (33)
fonte
\0
no final do seu arquivo - você pode fazertruncate
isso e ainda funciona.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
dá 33 para mim$PATH
diretórios ou seja chamado com um caminho (recursão por$0
). ----- 2. O HTTP exige que as linhas sejam terminadas\r\n
não apenas\n
. Aqui a string deve ser$"HTTP/1.1 418\r\n\r"
(formato mais legível). ------ E finalmente: o script pode ser mais curto: o-q1
parâmetro não é necessário.echo
variante não funciona (pelo menos o Firefox não a reconhecerá como 418). No entanto, os\r
s não são necessários. As especificações dizem que\r\n\r\n
sim, mas pelo menos o Firefox e o Chrome aceitarão\n\n
, por isso parece estar no espírito do golfe não incluí-los. O-q1
parâmetro foi necessário no meu sistema, porque o navegador não fechará a conexão sozinho.$0
funciona bem se o script for tornado executável e chamado dessa maneira.wget
que parece estar bem com apenas uma nova linhaPHP - 85 bytes
Salvo com terminações de linha no estilo Windows (CR-LF), é necessário
php_sockets
ativar.Na verdade, eu usei isso como meu código de erro para o Hard Code Golf: Criar um desafio no Chatroom , mas ninguém percebeu.
Versão amigável ao navegador
Inicie o script na CLI e aponte seu navegador para
http://localhost
.fonte
I'm a teapot
:-)Node.js (LiveScript)
http
módulo - 66Inspirado pela resposta de Qwertiy .
net
módulo - 76fonte
Ruby + Rack, 19 bytes
Deve ser salvo como
config.ru
e executado com orackup
comandoOu se você preferir Ruby "puro":
42 bytes +
-rrack
sinalizador = 48 bytesfonte
Comandos gerais do Bash + BSD, 29
Tomando emprestado um pouco de outras respostas:
Trabalha para mim com
wget
.Primeira resposta a ser usada
nc
, 38Estou assumindo privilégios de root - execute da seguinte maneira:
fonte
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
opção :) Testei o código com o Firefox e, sem duas novas linhas, o código de status não é reconhecido.Ruby (comando do sistema nc) - 35
O DigitalTrauma deve receber o crédito pela ideia de usar
nc
, no entanto, Ruby pode fazer um loop infinito com menos caracteres que o Bash :)Ruby (TCPServer) - 75
Essa nova linha é intencional - o caractere da nova linha real é um caractere menor que "\ n".
Ruby (WEBrick HTTPServer) - 87
fonte
Node.js, 80
A resposta é
fonte
Python 3 106
fonte
from socket import*;s=socket(AF_INET,SOCK_STREAM)
é mais curto.while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- a menos que eu tenha perdido alguma coisa. (By the way, fique à vontade para contar novas linhas de uma única personagens, como a língua permite-lhes Dessa forma, você nada solto, separando os comandos por novas linhas em vez de.;
.)s=socket(2,1)
(pelo menos esses são os valores no meu Linux).listen()
o parâmetro de que "o valor máximo depende do sistema (geralmente 5)". Então, em vez de 10, 9 é mais do que suficiente e 1 caractere mais curto. E em vez debytes('HTTP/1.1 418\n','UTF8')
um literalb'HTTP/1.1 418\n'
é suficiente. Ou se você criar o código Python 2, ob
prefixo de bytes não será mais necessário. E o mais curtosend()
também parece ser suficiente.Haskell - 142 bytes
fonte
Tcl (> = 8,5), 78 bytes
Editar - adicionada em uma nova linha extra (total de 2 novas linhas) por motivos de conformidade.
fonte
Julia:
8673 caracteresfonte
Powershell, 398
258
fonte
R, 80 caracteres
Nunca fiz soquete de programação com R antes, mas vou tentar:
Aqui
socketConnection
abre um soquete: o primeiro argumento deve ser o host, o padrão élocalhost
que podemos ignorá-lo aqui; o segundo argumento é a porta que não possui padrão; o argumento,server
quando especificado,TRUE
cria o soquete, seFALSE
ele se conectar apenas a um existente.T
é, por padrão, igual aTRUE
, em R.Editar: conforme sugerido em uma edição sugerida por @AlexBrown, isso pode ser reduzido para 69 caracteres :
fonte
Node.js koa , 61 bytes
Resposta:
Requer nó v0.11.12 +
Correr como:
fonte
function*
?Shell + sociedade, 60
fonte
echo -e HTTP/1.1 418 T\r\n\r
é mais curto.\\ T
não é sequer necessário.MATLAB,
9786 bytesNão é realmente um candidato sério em termos de contagem absoluta de bytes, mas gostaria de publicá-lo porque não achei que seria possível escrever um servidor da Web totalmente funcional usando uma ferramenta matemática. Observe o uso de encurtamento de propriedade :
'Ne','s'
expande internamente para'NetworkRole', 'server'
.fonte
Você pode fazer isso com o mínimo de esforço usando um
.htaccess
arquivo e php.Todos os acessos ao seu servidor retornarão o status 418.
Abaixo está o código:
.htaccess (28 bytes)
PHP (
3819 bytes)Agradeço ao @primo por me salvar um monte de bytes!
Eu testei isso e confirmo que ele retorna o resultado desejado!
A propósito, "Pedido" significa "Solicitação" e "Resposta" significa "Resposta".
fonte
node.js com CoffeeScript (76)
Basta compilá-lo em JavaScript, para executar
npm install connect
. Depois disso, inicie-o comnode server.js
fonte
nginx - 35
Jogue isso no nginx.conf, inicie o nginx.
Não tenho certeza se isso usa brechas padrão "Usando funções internas para fazer o trabalho" ou "Interpretando o desafio muito literalmente". Ops, parece que o OP não vai gostar desta resposta.
fonte
;
?Perl, 78
correr como
plackup whatever.pl
.fonte
sub{[418,[],[]]}
ser suficiente. (16 caracteres.)Python 2.7 / Django, 94 bytes
(adicionado a partir do padrão do site
django-admin.py startproject
) Em urls.py:fonte
C # + OWIN
251240Eu realmente esperava que fosse mais curto, mas os longos espaços para nome arruinaram esse plano. Requer o
Microsoft.Owin.SelfHost
pacote disponível no NuGet.fonte
node.js com o connect (78)
Você precisa correr
npm install connect
primeiro. Então comece comnode server.js
fonte
Go, 162 bytes
fonte
Fator,
101141 bytesRetorne 418 a todos que se conectarem.
fonte
Java 7, 208 bytes
Esta pergunta precisava de uma resposta java.
fonte