python实现Web服务器

送分小仙女□ 提交于 2020-01-08 09:30:46

python深入浅出进阶教程

web request

#模拟浏览器请求web服务器
import socket

tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
tcpSocket.connect(("121.36.32.38",80))
requestLine = "GET / HTTP/1.1\r\n"
requestHeader = "host:www.yaojun.com\r\n"
requestBlank = "\r\n"
requestData = requestLine + requestHeader + requestBlank
tcpSocket.send(requestData.encode()) #已经建立了连接 直接发送
receiveData = tcpSocket.recv(4096)
receiveText = receiveData.decode()
loc = receiveText.find("\r\n\r\n")
html = receiveText[loc+4:]
with open("index.html","w+") as f:
    f.write(html)
tcpSocket.close()

web response

返回浏览器固定数据

import socket
def requestHandler(newsocket,ipPort):
    receiveData = newsocket.recv(1024)
    if not receiveData:
        print("%s客户端已经断开!"%str(ipPort))
        newsocket.close()
        return
    responseLine="HTTP/1.1 200 OK\r\n"
    responseHeader ="Server:Python20WS/2.1\r\n"
    responseBlank ="\r\n"
    responseBody="hello world!"
    responseData = responseLine+responseHeader+responseBlank+responseBody
    newsocket.send(responseData.encode())
    newsocket.close()
    pass
def main():
    tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
    tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    tcpSocket.bind(("",8080)) #元组
    tcpSocket.listen(128) #监听上限 在windows 128有效 在linux无效
    while True:
        newSocket,ipPort = tcpSocket.accept() #阻塞等待客户端连接 ipPort是个元组只有两个元素
        print(ipPort[0]) #IP
        print(ipPort[1]) #port
        requestHandler(newSocket,ipPort)


if __name__ == '__main__':
    main()

Web Server

从浏览器打开返回固定页面

import socket
def requestHandler(newsocket,ipPort):
    receiveData = newsocket.recv(1024)
    if not receiveData:
        print("%s客户端已经断开!"%str(ipPort))
        newsocket.close()
        return
    responseLine="HTTP/1.1 200 OK\r\n"
    responseHeader ="Server:Python20WS/2.1\r\n"
    responseBlank ="\r\n"
    #从文件中读入固定页面
    with open("index.html", "rb") as f:
        responseBody = f.read() #读入的是二进制文件
    responseData = (responseLine+responseHeader+responseBlank).encode()+responseBody
    newsocket.send(responseData)
    newsocket.close()
    pass
def main():
    tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
    tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    tcpSocket.bind(("",8080)) #元组
    tcpSocket.listen(128) #监听上限 在windows 128有效 在linux无效
    while True:
        newSocket,ipPort = tcpSocket.accept() #阻塞等待客户端连接 ipPort是个元组只有两个元素
        print(ipPort[0]) #IP
        print(ipPort[1]) #port
        requestHandler(newSocket,ipPort)


if __name__ == '__main__':
    main()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!