Last active
May 31, 2016 09:52
-
-
Save limboinf/ce86f61a6dc324861f61aab8d0792070 to your computer and use it in GitHub Desktop.
Python implements a simple http server (version 1.0, blocking socket.)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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