Как мы все должны знать, есть HTTP-код состояния 418: я чайник .
Ваша миссия, если вы решите принять ее, - это использовать ваш creativitea и написать наименьший возможный сервер, который отвечает приведенным выше кодом состояния, на любой и любой HTTP-запрос, сделанный к нему.
Применяются стандартные лазейки , в том числе
Извлечение желаемого выхода из внешнего источника
Это включает в себя выполнение HTTP-запроса для извлечения страницы с вопросом и извлечения решения с этой страницы. Это было слегка забавно еще в 2011 году, но сейчас оно производное и неинтересное.
Это означает, что вы не можете просто перенаправить запрос на другой сервер, чтобы он возвратил ответ.
Устранение путаницы в функциональности сервера:
ваш сервер может делать все (или ничего), пока к нему не поступает HTTP-запрос, если он отвечает правильным ответом после выполнения HTTP-запроса.
Ответы:
GNU Awk: 69 символов
Сам сервер (бесконечно обслуживает один запрос за раз), библиотека не используется.
Отправьте 418 всем, кто подключается (
8269 символов):Отправьте 418 всем, кто что-то отправляет (
9380 символов):Отправьте 418 всем, кто отправляет действительный HTTP-запрос GET (
122109 символов):источник
netcat
,telnet
,wget
,curl
, другой GNUawk
сценарий, ... Теоретически он прослушивает локального хоста: 80, но для того, что 1) нет веб - сервера, Skype или другой программы , следует использовать порт 80; 2) Вы должны быть суперпользователем, чтобы открыть порты ниже 1024. Поэтому для тестирования проще отредактировать номер порта в скрипте на что-то вроде 8080 (s="/inet/tcp/8080/0/0"
), а затем подключиться к нему. pastebin.com/zauP7LMAБаш (33)
источник
\0
в конец вашего файла - вы можетеtruncate
это сделать, и он все еще работает.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
дает 33 для меня$PATH
каталогов или что он вызывается с путем (рекурсия по$0
). ----- 2. HTTP требует, чтобы строки заканчивались\r\n
не только\n
. Здесь строка должна быть$"HTTP/1.1 418\r\n\r"
(более читабельная форма). ------ И наконец: скрипт может быть короче:-q1
параметр не обязателен.echo
вариант не работает (по крайней мере, Firefox не распознает его как 418). Тем не менее,\r
с не нужны. Спецификация говорит, что так и должно быть\r\n\r\n
, но, по крайней мере, Firefox и Chrome примут\n\n
, так что, похоже, в духе игры в гольф их не включать.-q1
Параметр необходим в моей системе, потому что браузер не закроет соединение самого по себе.$0
работает нормально, если скрипт сделан исполняемым и вызывается таким образом.wget
кажется, что все в порядке с одной новой строкойPHP - 85 байт
Сохраняется с окончаниями строк в стиле Windows (CR-LF), требуется
php_sockets
включить.Я фактически использовал это в качестве кода ошибки для Hard Code Golf: создайте вызов в чате , но никто не заметил.
Версия для браузера
Запустите сценарий в интерфейсе командной строки и укажите свой браузер на
http://localhost
.источник
I'm a teapot
:-)Node.js (LiveScript)
http
модуль - 66Вдохновленный ответом Qwertiy .
net
модуль - 76источник
Ruby + Rack, 19 байтов
Должен быть сохранен как
config.ru
и запущен сrackup
командой.Или, если вы предпочитаете "чистый" Ruby:
42 байта +
-rrack
флаг = 48 байтовисточник
Общие команды Bash + BSD, 29
Займем немного назад от других ответов:
У меня работает с
wget
.Первый ответ использовать
nc
, 38Я предполагаю права суперпользователя - запустите следующее:
источник
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
переключатель :) Я тестировал код с Firefox и без двух новых строк код состояния не распознается.Ruby (системная команда nc) - 35
DigitalTrauma должна получить признание за идею использования
nc
, однако Ruby может сделать бесконечный цикл с меньшим количеством символов, чем Bash :)Рубин (TCPServer) - 75
Эта новая строка является преднамеренной - фактический символ новой строки на один символ короче, чем "\ n".
Рубин (WEBrick HTTPServer) - 87
источник
Node.js, 80
Ответ
источник
Python 3 106
источник
from socket import*;s=socket(AF_INET,SOCK_STREAM)
короче.while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- если я что-то пропустил. (Между прочим, не стесняйтесь считать новые строки отдельными символами, поскольку язык позволяет им. Таким образом, вы ничего не теряете, разделяя команды вместо;
s=socket(2,1)
(по крайней мере, это их значения в моем Linux).listen()
параметра «указано, что« максимальное значение зависит от системы (обычно 5) ». Таким образом, вместо 10, 9 более чем достаточно и 1 символ короче. И вместоbytes('HTTP/1.1 418\n','UTF8')
буквальногоb'HTTP/1.1 418\n'
вполне достаточно. Или, если вы делаете код Python 2, тогдаb
префикс байта больше не нужен. И корочеsend()
тоже кажется достаточно.Haskell - 142 байта
источник
Tcl (> = 8,5), 78 байт
Редактировать - добавлен дополнительный перевод строки (всего 2 перехода) для соответствия.
источник
Юлия:
8673 персонажаисточник
Powershell, 398
258
источник
R, 80 символов
Никогда раньше не программировал сокеты с помощью R, но я попробую:
Здесь
socketConnection
открывается сокет: первый аргумент должен быть хостом, по умолчаниюlocalhost
мы можем пропустить его здесь; второй аргумент - это порт, который не имеет значения по умолчанию, а затем аргумент,server
если он указан,TRUE
создает сокет, еслиFALSE
он просто подключается к существующему.T
по умолчанию равноTRUE
R.Редактировать: как предложено в предлагаемом редакторе @AlexBrown, это можно сократить до 69 символов :
источник
Node.js koa , 61 байт
Отклик:
Требуется узел v0.11.12 +
Беги как:
источник
function*
?Shell + socat, 60
источник
echo -e HTTP/1.1 418 T\r\n\r
короче\\ T
даже не нужно.MATLAB,
9786 байтНе очень серьезный претендент с точки зрения абсолютного количества байтов, но я хотел бы опубликовать его, потому что я не думал, что можно было бы написать полнофункциональный веб-сервер с использованием математического инструмента. Обратите внимание на использование сокращения свойства :
'Ne','s'
внутренне расширяется до'NetworkRole', 'server'
.источник
Вы можете сделать это с минимальными усилиями, используя
.htaccess
файл и PHP.Все обращения к вашему серверу вернут статус 418.
Ниже приведен код:
.htaccess (28 байт)
PHP (
3819 байт)Спасибо @primo за то, что спасли мне кучу байтов!
Я проверил это и подтверждаю, что он возвращает желаемый результат!
Кстати, «Pedido» означает «Запрос», а «Resposta» означает «Ответ».
источник
node.js с CoffeeScript (76)
Просто скомпилируйте его в JavaScript, тогда вам нужно запустить
npm install connect
. После этого начните сnode server.js
источник
nginx - 35
Добавьте это в nginx.conf, запустите nginx.
Не уверен, что при этом используются стандартные лазейки «Использование встроенных функций для выполнения работы» или «Слишком прямое толкование задачи». К сожалению, OP не понравится этот ответ.
источник
;
?Perl, 78
беги как
plackup whatever.pl
.источник
sub{[418,[],[]]}
должно быть достаточно. (16 символов.)Python 2.7 / Django, 94 байта
(добавлено из стандартного шаблона из
django-admin.py startproject
) В urls.py:источник
C # + OWIN
251240Я действительно надеялся, что это будет короче, но длинные пространства имен разрушили этот план. Требуется
Microsoft.Owin.SelfHost
пакет, доступный на NuGet.источник
node.js с connect (78)
Вам нужно бежать
npm install connect
первым. Тогда начни сnode server.js
источник
Go, 162 байта
источник
Фактор
101141 байтВерните 418 каждому, кто подключается.
источник
Java 7, 208 байт
Этот вопрос нуждался в ответе Java.
источник