Skip to content

Instantly share code, notes, and snippets.

@limboinf
Last active May 31, 2016 09:52
Show Gist options
  • Save limboinf/ce86f61a6dc324861f61aab8d0792070 to your computer and use it in GitHub Desktop.
Save limboinf/ce86f61a6dc324861f61aab8d0792070 to your computer and use it in GitHub Desktop.
Python implements a simple http server (version 1.0, blocking socket.)
# coding=utf-8
"""
简单的HTTP服务器 V1
:copyright: (c) 2016 by fangpeng(@beginman.cn).
:license: MIT, see LICENSE for more details.
"""
import socket
EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
response = b'HTTP/1.1 200 OK\r\nDate: Mon,1 Jan 1996 01:01:01 GMT\r\n'
response += b'Content-Type: text/plain\r\nContent-Length:13\r\n\r\n'
response += b'Hello, world!'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('0.0.0.0', 8000))
sock.listen(1)
try:
while True:
# 程序会一直阻塞在这里, 直到建立了一个连接.
# 这个时候, 服务器socket会建立一个新的socket, 用来和客户端通讯.
# 这个新的socket是accept()的返回值, address对象标示了客户端的IP地址和端口.
conn, addr = sock.accept()
request = b''
while EOL1 not in request and EOL2 not in request:
request += conn.recv(1024)
print('-'*40 + '\n' + request.decode()[:-2])
conn.send(response)
conn.close()
finally:
sock.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment