418: ฉันเป็นกาน้ำชา


68

ในฐานะที่เราทุกคนควรจะรู้ว่ามีรหัสสถานะ HTTP 418: ฉันกาน้ำชา

ภารกิจของคุณหากคุณเลือกที่จะยอมรับก็คือการใช้งาน creativitea ของคุณและเขียนเซิร์ฟเวอร์ที่เล็กที่สุดเท่าที่จะเป็นไปได้ซึ่งตอบสนองด้วยรหัสสถานะด้านบนไปยังคำขอ HTTP ใด ๆ และทุกๆคำขอ

ช่องโหว่มาตรฐานใช้รวมถึง

ดึงเอาท์พุทที่ต้องการจากแหล่งภายนอก

ซึ่งรวมถึงการทำคำร้องขอ HTTP เพื่อดึงข้อมูลหน้าด้วยคำถามและแยกโซลูชันออกจากหน้านั้น นี่เป็นเรื่องน่าขบขันอย่างไม่น่าเชื่อในปี 2554 แต่ตอนนี้เป็นสิ่งที่ไม่น่าสนใจ

หมายความว่าคุณไม่สามารถเปลี่ยนเส้นทางคำขอไปยังเซิร์ฟเวอร์อื่นเพื่อให้ตอบกลับได้


จัดการกับความสับสนเกี่ยวกับการทำงาน
ของเซิร์ฟเวอร์:เซิร์ฟเวอร์ของคุณสามารถทำอะไรก็ได้ (หรืออะไรก็ได้) ในขณะที่ไม่มีการร้องขอ HTTP ตราบใดที่มันตอบกลับด้วยการตอบสนองที่ถูกต้องเมื่อมีการร้องขอ HTTP


15
กับคำขอ http แต่ละรายการหรือทุกรายการ แน่นอนว่าเป็นแค่กาแฟเท่านั้น: URI?
dave

3
เราขอสมมติว่าเรามีสิทธิ์ใช้งานรูตแล้ว? (เช่นผูก () ถึงพอร์ต 80 ก็โอเค)
Digital Trauma

2
@DigitalTrauma ใช่คุณสามารถรับสิทธิ์เพิ่มเติมสำหรับเซิร์ฟเวอร์ของคุณ
นิด

4
@Knerd ฉันกำลังยืนพิงคุณไม่ได้เขียนโปรแกรมคุณเพียงกำหนดค่าไว้
นิตย์

2
พระเจ้าช่วย. ด้วย IOT ที่กำลังมาถึงรหัสสถานะนี้อาจมีเหตุผลที่แท้จริงอยู่!
Luminous

คำตอบ:


39

GNU Awk: 69 ตัวอักษร

เซิร์ฟเวอร์เอง (ให้บริการครั้งละหนึ่งคำขอ) โดยไม่ใช้ห้องสมุด

ส่ง 418 ให้กับทุกคนที่เชื่อมต่อ ( 82 69 ตัวอักษร):

BEGIN{while(s="/inet/tcp/80/0/0"){print"HTTP/1.1 418\n"|&s
close(s)}}

ส่ง 418 ให้กับทุกคนที่ส่งบางสิ่งบางอย่าง ( 93 80 ตัวอักษร):

BEGIN{while(s="/inet/tcp/80/0/0"){s|&getline
print"HTTP/1.1 418\n"|&s
close(s)}}

ส่ง 418 ให้กับทุกคนที่ส่งคำขอ HTTP GET ที่ถูกต้อง ( 122 109 ตัวอักษร):

BEGIN{while(s="/inet/tcp/80/0/0"){s|&getline
if(/^GET \S+ HTTP\/1\.[01]$/)print"HTTP/1.1 418\n"|&s
close(s)}}

แต่ .. วิธีการเชื่อมต่อ? ;)
เครื่องมือเพิ่มประสิทธิภาพ

5
เช่นเดียวกับที่คุณเชื่อมต่อกับเว็บเซิร์ฟเวอร์ใด ๆ เบราว์เซอร์netcat, telnet, wget, curlอีก GNU awkสคริปต์ ... ในทางทฤษฎีมันฟังใน localhost: 80 แต่สำหรับ 1) เว็บเซิร์ฟเวอร์ที่ไม่มี Skype หรือโปรแกรมอื่น ๆ ควรใช้พอร์ต 80; 2) คุณต้องเป็นผู้ใช้ขั้นสูงในการเปิดพอร์ตที่ต่ำกว่า 1024 ดังนั้นสำหรับการทดสอบจะง่ายกว่าที่จะแก้ไขหมายเลขพอร์ตในสคริปต์เป็นอย่างเช่น 8080 ( s="/inet/tcp/8080/0/0") จากนั้นเชื่อมต่อกับสิ่งนั้น pastebin.com/zauP7LMA
จัดการ

2
ฉันเห็น. เย็น. Awk noob ที่นี่ :)
เครื่องมือเพิ่มประสิทธิภาพ

1
คุณสามารถบันทึกไบต์โดยใช้พอร์ตที่เล็กกว่าเช่น 8 ซึ่งไม่ได้กำหนด
Hannes Karppila

@ HannesKarppila ถูกต้องแล้ว แต่เนื่องจากโซลูชันอื่น ๆ ทั้งหมดที่ระบุพอร์ต (ยกเว้นพอร์ตคำตอบของ Haskell 8888) ใช้พอร์ต 80 อย่างชัดเจนฉันควรเก็บไว้เป็นอย่างนี้เพื่อการเปรียบเทียบ
จัดการ

32

Bash (33)

nc -lp80 -q1<<<"HTTP/1.1 418
";$0

3
จำเป็นต้องขึ้นบรรทัดใหม่หรือไม่ ดูเหมือนว่าจะทำงานได้ตกลงกับฉันคนเดียวเท่านั้น ด้วยการนับของฉันข้างต้นคือ 34 ไบต์ - ฉันเดาว่าตัวแก้ไขของคุณกำลังเพิ่มบรรทัดใหม่ที่ไม่จำเป็นหรือ\0ไปยังจุดสิ้นสุดของไฟล์ของคุณ - คุณสามารถทำได้truncateและมันยังใช้ได้ s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}มอบ 33 ให้ฉัน
Digital Trauma

@DigitalTrauma: คุณถูกต้อง - บรรทัดใหม่สุดท้ายถูกเพิ่มโดยอัตโนมัติในที่นี่สตริง: ทำไมทุบตีที่นี่ - สตริงเพิ่มอักขระขึ้นบรรทัดใหม่ต่อท้ายหรือไม่ ------ แต่ฉันเห็นปัญหาที่เป็นไปได้สองประการ: 1.สคริปต์คาดหวังว่าจะถูกเก็บไว้ใน$PATHไดเรกทอรีใดไดเรกทอรีหนึ่งหรือถูกเรียกด้วยเส้นทาง (เรียกซ้ำโดย$0) ----- 2. HTTP ต้องว่าสายจะยกเลิกโดยไม่เพียง แต่\r\n \nสตริงที่นี่ควรเป็น$"HTTP/1.1 418\r\n\r"(รูปแบบอ่านได้อีกต่อไป) ------ และสุดท้าย: สคริปต์อาจสั้นกว่า: -q1ไม่จำเป็นต้องใช้พารามิเตอร์
pabouk

2
@DigitalTrauma, @pabouk: เอาต์พุตต้องการลงท้ายด้วยสองบรรทัดใหม่ ดังนั้นหนึ่งในบรรทัดใหม่นั้นไม่จำเป็น (เพราะนี่คือสตริง) แต่echoตัวแปรไม่ทำงาน (อย่างน้อย Firefox จะไม่รู้จักว่าเป็น 418) อย่างไรก็ตาม\rไม่จำเป็น ข้อมูลจำเพาะบอกว่าควรจะเป็น\r\n\r\nแต่อย่างน้อย Firefox และ Chrome จะยอมรับ\n\nดังนั้นดูเหมือนว่าจะอยู่ในจิตวิญญาณของการเล่นกอล์ฟที่จะไม่รวมพวกเขา -q1พารามิเตอร์เป็นสิ่งจำเป็นในระบบของฉันเพราะเบราว์เซอร์จะไม่ปิดการเชื่อมต่อด้วยตัวเอง $0ทำงานได้ดีถ้าสคริปต์นั้นสามารถเรียกใช้งานได้และเรียกในลักษณะนั้น
marinus

@marinus น่าสนใจ - ฉันทดสอบwgetซึ่งดูเหมือนว่าจะดีกับหนึ่งบรรทัดใหม่
Digital Trauma

1
@pabouk - ตัวอย่างที่น่าสนใจที่นี่w3.org/Protocols/HTTP/OldServers.html : "เส้นควรถูกมองว่าถูกยกเลิกโดย Line Feed และตัวอักษร Carriage Return ก่อนหน้าถูกละเว้น"
Digital Trauma

30

PHP - 85 ไบต์

<?for($s=socket_create_listen(80);socket_write(socket_accept($s),"HTTP/1.1 418
"););

บันทึกด้วยการสิ้นสุดบรรทัด Windows-Style (CR-LF) ต้องphp_socketsเปิดใช้งาน

จริง ๆ แล้วฉันใช้สิ่งนี้เป็นรหัสข้อผิดพลาดของฉันสำหรับHard Code Golf: สร้างความท้าทายในห้องสนทนาแต่ไม่มีใครสังเกตเห็น


เวอร์ชันที่เหมาะกับเบราว์เซอร์

<?for(socket_getsockname($s=socket_create_listen(80),$n);$t="I'm a teapot";socket_write($c=socket_accept($s),"HTTP/1.0 418 $t
Content-Length: $l

<title>418 $t</title><h1>$t</h1>The requested resource is not suitable for brewing coffee.<hr><i>$n:80</i>"))$l=124+strlen($n);

เริ่มสคริปต์ใน CLI http://localhostและเบราว์เซอร์ของคุณได้ที่


1
+1 สำหรับผู้ใช้ firendlyness / I'm a teapot:-)
Levit

20

Node.js (LiveScript)

http โมดูล - 66

require(\http)createServer (->&1.writeHead 418;&1.end!) .listen 80

แรงบันดาลใจจากคำตอบของ Qwertiy

net โมดูล - 76

require(\net)createServer (->it.write 'HTTP/1.1 418\r\n';it.end!) .listen 80

2
คนที่ downvote สนใจที่จะอธิบายว่าทำไม?
nyuszika7h

20

Ruby + Rack ขนาด 19 ไบต์

run->e{[418,{},[]]}

จะต้องบันทึกเป็นconfig.ruและเรียกใช้ด้วยrackupคำสั่ง

หรือถ้าคุณชอบทับทิม "บริสุทธิ์":

Rack::Handler::WEBrick.run->e{[418,{},[]]}

42 ไบต์ + -rrackธง = 48 ไบต์


12

Bash + BSD คำสั่งทั่วไป, 29

ยืมกลับมาเล็กน้อยจากคำตอบอื่น ๆ :

nc -lp80<<<"HTTP/1.1 418
";$0

wgetทำงานให้ฉันด้วย

คำตอบแรกที่ใช้nc38

for((;;)){
nc -l 80 <<<HTTP/1.1\ 418
}

ฉันสมมติว่าสิทธิ์รูท - ทำงานดังนี้:

sudo bash ./418.sh

3
@ ub3rst4r ถูกต้อง - นั่นคือเหตุผลที่ฉันระบุ "คำสั่งทั่วไป BSD" ซึ่งอาจถือเป็น "ห้องสมุด" จากมุมมองของสคริปต์เปลือก จาก OP: "ยินดีต้อนรับทุก
Digital Trauma

2
การตอบสนองจะต้องจบลงด้วยการขึ้นบรรทัดใหม่ให้ดู w3.org/Protocols/HTTP/Response.html
นิตย์

2
@Nit - ใช่ - ทุบตี "here strings" จะถูกผนวกเข้ากับบรรทัดใหม่โดยอัตโนมัติ
Digital Trauma

1
วิธีการเกี่ยวกับnc -l 80 <<<HTTP/1.1\ 418;$0
core1024

1
ขออภัยในความสับสนกับช่องว่างทั้งสอง ฉันไม่ได้สังเกตว่าคุณไม่ได้ใช้-pสวิตช์ :) ฉันทดสอบโค้ดด้วย Firefox และไม่มีบรรทัดใหม่สองบรรทัดรหัสสถานะไม่เป็นที่รู้จัก
pabouk

9

Ruby (คำสั่งระบบ nc) - 35

loop{`nc -l 80 <<<"HTTP/1.1 418"`}

DigitalTrauma ควรได้รับเครดิตสำหรับแนวคิดในการใช้ncอย่างไรก็ตาม Ruby สามารถสร้างวงวนไม่สิ้นสุดที่มีอักขระน้อยกว่า Bash :)

Ruby (TCPServer) - 75

require'socket'
s=TCPServer.new 80
loop{(s.accept<<'HTTP/1.1 418
').close}

ขึ้นบรรทัดใหม่นั้นโดยเจตนา - อักขระขึ้นบรรทัดใหม่จริงคืออักขระหนึ่งตัวที่สั้นกว่า "\ n"

ทับทิม (WEBrick HTTPServer) - 87

require'webrick'
(s=WEBrick::HTTPServer.new).mount_proc(?/){|_,r|r.status=418}
s.start

การตอบสนองจะต้องจบลงด้วยการขึ้นบรรทัดใหม่ให้ดูw3.org/Protocols/HTTP/Response.html
นิตย์

1
@DigitalTrauma ผมก็จะใช้ว่า แต่แล้วตระหนักทับขวาจะต้องหนีด้วย backslash อื่นดังนั้นก็จะได้รับหมายเลขเดียวกันของตัวละครอยู่แล้ว :)
แต้มโทมัส

@TreyThomas โอ้ฉันเข้าใจแล้ว - ดังนั้น Ruby ต้องการการหลบหนีในระดับพิเศษที่นี่
Digital Trauma

8

Node.js, 80

require('http').createServer(function(q,s){s.writeHead(418);s.end()}).listen(80)

คำตอบคือ

HTTP/1.1 418 I'm a teapot
Date: Wed, 19 Nov 2014 21:08:27 GMT
Connection: keep-alive
Transfer-Encoding: chunked

0

2
ฉันคิดว่ามันยอดเยี่ยมมากที่โหนดรองรับรหัสข้อผิดพลาดนั้นด้วยวิธีดั้งเดิม ^^
Levit

8

Python 3 106

s=__import__('socket').socket(2,1) 
s.bind(('',80))
s.listen(9)
while 1:s.accept()[0].send('HTTP/1.1 418\n')

1
ขึ้นอยู่กับhallvabo 's ความคิดเห็นในเคล็ดลับสำหรับการเล่นกอล์ฟในหลาม , from socket import*;s=socket(AF_INET,SOCK_STREAM)สั้น
จัดการ

@ การจัดการขอบคุณมีวิธีที่สั้นลงในการวนซ้ำไม่สิ้นสุดหรือไม่ ฉันไม่พบหนึ่งในเคล็ดลับ ...
Tuomas Laakkonen

3
while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))- ถ้าฉันไม่ได้รับอะไรเลย (โดยวิธีการรู้สึกอิสระที่จะนับบรรทัดใหม่ตัวละครเดียวเป็นภาษาที่ช่วยให้พวกเขาด้วยวิธีที่คุณไม่มีอะไรหลวมโดยแยกคำสั่งโดยการขึ้นบรรทัดใหม่แทน;.)
จัดการ

คุณสามารถตัดออก 2 ตัวอักษรด้วยการสมมติว่าพอร์ต 80 สามารถเข้าถึงได้ตามความคิดเห็นของเจ้าของคำถาม สิ่งที่น่าเกลียดหนึ่งซึ่งอาจทำลายพกพา แต่อาจเป็นที่ยอมรับที่นี่: ใช้ค่าคงที่โดยตรง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ไม่จำเป็นต้องใช้bytesprefix อีกต่อไป และสั้นกว่าsend()ก็ดูเหมือนจะเพียงพอ
จัดการ


5

Tcl (> = 8.5), 78 ไบต์

แก้ไข - เพิ่มในบรรทัดใหม่พิเศษ (รวมทั้งหมด 2 บรรทัดใหม่) เพื่อประโยชน์ในการปฏิบัติตาม

socket -server {apply {{c - -} {puts $c "HTTP/1.1 418
";close $c}}} 80
vwait f

การตอบสนองจะต้องจบลงด้วยการขึ้นบรรทัดใหม่ให้ดู w3.org/Protocols/HTTP/Response.html
นิตย์

3
@Nit - ใช่ Tcl ที่ใส่จะผนวกบรรทัดใหม่โดยอัตโนมัติเว้นแต่จะมีการกำหนดตัวเลือก -nonewline tcl.tk/man/tcl/TclCmd/puts.htm
Digital Trauma

5

จูเลีย: 86 73 ตัวละคร

s=listen(80)
while 1<2
c=accept(s)
write(c,"HTTP/1.1 418

")
close(c)
end

ฉันไม่คิดว่าคุณต้องการส่วน "ฉันเป็นกาน้ำชา" จริง - รหัสการตอบสนองควรจะเพียงพอ
Desty

ใช่ฉันสังเกตเห็น แต่นั่นก็ไม่ได้ช่วยอะไรมากนักกับคะแนนของ Julia ฉันเก็บมันไว้อย่างครบถ้วน แต่อาจจะเป็นการดีกว่าที่จะลบออกเพื่อช่วยในการเปรียบเทียบภาษา
จัดการ

5

พาวเวอร์เซลล์, 398

$Listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse("10.10.10.10"), 80)
$Listener.Start()
while($true)
{
    $RemoteClient = $Listener.AcceptTcpClient()
    $Stream = $RemoteClient.GetStream()
    $Writer = New-Object System.IO.StreamWriter $Stream
    $Writer.Write("HTTP/1.1 418 I'm a Teapot`nConnection: Close`n`n")
    $Writer.Flush()
    $RemoteClient.Close()
}

258

$l=New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse("10.10.10.10"),80);$l.Start();while($true){$r = $l.AcceptTcpClient();$s = $r.GetStream();$w = New-Object System.IO.StreamWriter $s;$w.Write("HTTP/1.1 418`n`n");$w.Flush();$r.Close()}

5

R, 80 ตัวอักษร

ไม่เคยเขียนโปรแกรมซ็อกเก็ตด้วย R มาก่อน แต่ฉันจะลองดู:

repeat{s=socketConnection(,80,T,open="r+");cat("HTTP/1.1 418\n",file=s);close(s)}

นี่socketConnectionเปิดซ็อกเก็ต: อาร์กิวเมนต์แรกควรเป็นโฮสต์ค่าเริ่มต้นที่localhostเราสามารถข้ามได้ที่นี่ อาร์กิวเมนต์ที่สองคือพอร์ตที่ไม่มีค่าเริ่มต้นจากนั้นอาร์กิวเมนต์serverเมื่อระบุTRUEจะสร้างซ็อกเก็ตหากFALSEเชื่อมต่อกับพอร์ตที่มีอยู่ Tตามค่าเริ่มต้นเท่ากับTRUEใน R

แก้ไข:ตามที่แนะนำในการแก้ไขที่แนะนำโดย @AlexBrown ซึ่งอาจทำให้สั้นลงเป็น69 ตัวอักษร :

repeat cat("HTTP/1.1 418\n",file=s<-socketConnection(,80,T))+close(s)

4

Node.js koa , 61 Bytes

require('koa')().use(function*(){this.status=418}).listen(80)

การตอบสนอง:

HTTP/1.1 418 I'm a teapot
X-Powered-By: koa
Content-Type: text/plain; charset=utf-8
Content-Length: 12
Date: Thu, 20 Nov 2014 07:20:36 GMT
Connection: close

I'm a teapot

ต้องการโหนด v0.11.12 +

ทำงานเป็น:

node --harmony app.js

อะไรนะfunction*?
nyuszika7h

2
นั่นเป็นฟังก์ชันตัวสร้างส่วนหนึ่งของข้อเสนอ ECMAScript 6 ความสามัคคี
cPu1


3

MATLAB, 97 86 ไบต์

ไม่ใช่ผู้แข่งขันที่จริงจังในแง่ของจำนวนไบต์ที่แน่นอน แต่ฉันต้องการโพสต์เพราะฉันไม่คิดว่ามันจะเป็นไปได้ที่จะเขียนเว็บเซิร์ฟเวอร์ที่ทำงานได้อย่างสมบูรณ์โดยใช้เครื่องมือทางคณิตศาสตร์ หมายเหตุการใช้งานการตัดทอนคุณสมบัติ :'Ne','s''NetworkRole', 'server'ภายในขยาย

t=tcpip('0.0.0.0','Ne','s');while 1
fopen(t)
fprintf(t,'HTTP/1.1 418\n')
fclose(t)
end

3

คุณสามารถทำได้โดยใช้ความพยายามเพียงเล็กน้อยโดยใช้.htaccessไฟล์และ php

การเข้าถึงเซิร์ฟเวอร์ของคุณทั้งหมดจะส่งคืนสถานะ 418

ด้านล่างเป็นรหัส:

.htaccess (28 ไบต์)

RewriteRule .* index.php [L]

PHP ( 38 19 ไบต์)

<<?header(TE,1,418);

ขอบคุณ@primo ที่ช่วยฉันเก็บบันทึกไบต์จำนวนมาก!


ฉันได้ทำการทดสอบนี้แล้วและยืนยันว่าจะส่งคืนผลลัพธ์ที่ต้องการ!

http://i.stack.imgur.com/wLb9p.png

โดยวิธีการ "Pedido" หมายถึง "คำขอ" และ "Resposta" หมายถึง "คำตอบ"


-1 นี่ไม่ใช่โปรแกรมที่สมบูรณ์ มันต้องอาศัยเว็บเซิร์ฟเวอร์ภายนอก
nyuszika7h

@ nyuszika7h จริงๆแล้วมันใช้ Apache กับ PHP ที่ติดตั้งเป็นโมดูล อาร์กิวเมนต์ของคุณถูกต้องและไม่ถูกต้อง Apache จะเปลี่ยนเส้นทางการเข้าถึงไฟล์ PHP เท่านั้นและไฟล์ PHP จะดูแลโค้ด
Ismael Miguel

@ nyuszika7h ถ้าเราลงไปบนเลเยอร์นั้นคุณจะไม่สามารถใช้คอนโซลเพื่อเรียกใช้โค้ด PHP ของคุณได้ Apache เป็นผู้เริ่มต้น ทริกเกอร์ที่ยิงกระสุน การเรียกใช้ไฟล์ PHP จากคอนโซลจะทำให้คอนโซลเรียกใช้
Ismael Miguel

คุณพึ่งพา Apache แล้วทำงานและฉันไม่คิดว่ามันจะทำงานโดยไม่เปลี่ยนการกำหนดค่าเริ่มต้นเช่นกัน ฉันไม่สนใจสิ่งที่คุณพูดไม่มีทางที่ฉันจะเห็นว่ามันถูกต้อง แต่คุณควรถาม @Nit เพราะเป็นคำถามของพวกเขา
nyuszika7h

@ nyuszika7h ถ้ามันไม่ถูกต้อง OP จะได้พูดไปแล้ว
Ismael Miguel

2

node.js พร้อม CoffeeScript (76)

require("connect")().use((q,s,n)->s.writeHead 418;s.end();return;).listen 80

เพียงแค่รวบรวมให้ JavaScript npm install connectแล้วคุณจำเป็นต้องเรียกใช้ หลังจากนั้นเริ่มด้วยnode server.js


2

nginx - 35

events{}http{server{return 418;}}

โยนสิ่งนั้นใน nginx.conf เริ่ม nginx

ไม่แน่ใจว่าสิ่งนี้ใช้ช่องโหว่มาตรฐาน "การใช้ฟังก์ชั่นในตัวเพื่อทำงาน" หรือ "ตีความความท้าทายเกินไปตามตัวอักษร" อ๊ะดูเหมือนว่า OP จะไม่ชอบคำตอบนี้


มันจะยังใช้งานได้ถ้าคุณทำหล่น;?
Cyril

+ 4 / -4: ทำได้ดีเมื่อมีข้อโต้แย้ง: D
cat

2

Perl, 78

use Web::Simple;sub dispatch_request{sub{[418,[],[]]}}__PACKAGE__->to_psgi_app

plackup whatever.plทำงานเป็น


หากคุณต้องการแอปพลิเคชั่นแบบ plack ก็sub{[418,[],[]]}เพียงพอแล้ว (16 ตัวอักษร)
tobyink

แน่นอนว่าคุณพูดถูก! ไม่ใช่ว่าฉันใช้เฟรมเวิร์กทำไมจึงโหลด :)
hobbs

@tobyink รู้สึกอิสระที่จะส่งเป็นของคุณเองแม้ว่า :)
ฮอบส์

2

Python 2.7 / Django, 94 ไบต์

(เพิ่มจากค่าเริ่มต้น boilerplate จากdjango-admin.py startproject) ใน urls.py:

import django.http.HttpResponse as r;urlpatterns=patterns(url(r'^*$',lambda q:r(status=418)))

1

C # + OWIN 251 240

ฉันหวังว่ามันจะสั้นกว่า แต่เนมสเปซที่ยาวนานทำให้แผนนั้นเสียหาย ต้องใช้Microsoft.Owin.SelfHostแพ็คเกจที่มีอยู่ใน NuGet

using Owin;class P{static void Main(){Microsoft.Owin.Hosting.WebApp.Start<P>("http://localhost");while(0<1);}public void Configuration(IAppBuilder a){a.Run(c=>{c.Response.StatusCode=418;return System.Threading.Tasks.Task.FromResult(0);});}}

1

node.js พร้อมการเชื่อมต่อ (78)

require('connect')().use(function(q,s,n){s.writeHead(418);s.end()}).listen(80)

คุณต้องวิ่งnpm install connectก่อน จากนั้นเริ่มด้วยnode server.js


1

ไป 162 ไบต์

package main
import "net/http"
func main(){http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){w.WriteHeader(418)})
http.ListenAndServe(":80", nil)
}

1

ตัวคูณ101 141 ไบต์

[ utf8 <threaded-server> readln 10 base> >>insecure [ "HTTP/1.1 418\r" print flush ] >>handler [ start-server ] in-thread start-server drop ]

ส่งคืน 418 ให้กับทุกคนที่เชื่อมต่อ


1

Java 7, 208 ไบต์

import java.net.*;class R{public static void main(String[]a)throws Exception{for(ServerSocket s=new ServerSocket(80);;){Socket p=s.accept();p.getOutputStream().write("HTTP/1.0 418\n".getBytes());p.close();}}}

คำถามนี้ต้องการคำตอบจาวา

poke@server ~
$ curl -i localhost:80
HTTP/1.0 418

ข้อความสถานะอยู่ที่ไหน
Qwertiy

@Qwertiy ฉันคิดว่าคำถามนี้ถามรหัสสถานะที่ฉันตีความว่าเป็นจำนวนเต็มเท่านั้นดังนั้นจึงเป็นไปตามที่ข้อความสถานะ / เหตุผลไม่จำเป็นต้องเคร่งครัด
โผล่

ไม่ใช่ฉันที่จะดูถูก แต่ฉันคิดว่ามันควรจะเป็นกับข้อความสถานะ
Qwertiy

3
รับ Java 8 แล้ว> _>
Pavel

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.