用python搭建一个简易服务器,获取http请求,并将请求资源封装到响应报文中返回。

import socket  #用套接字编程

serverPort = 6699
bind_ip = "127.0.0.1"  #设置端口号和本地ip
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, serverPort))
server.listen(5)
print 'the server is ready to receive'


def get_headers(line_list):
    headers = {}
    for line in line_list:
        new_line = line.decode('utf8')
        index = new_line.find(':')
        key = new_line[:index]
        value = new_line[index+1:].strip()
        headers[key] = value
    return headers
#动态获取请求报文需要的资源
while True:

    client, addr = server.accept()
    print "Accepted connection from: %s:%d" % (addr[0], addr[1])
    try:
        sentence = client.recv(1024)
        filename = sentence.split()[1]
        f = open('D:/'+filename.decode('utf-8'), 'rb')#   r"index.html", "r" 读取本地文件
        line_list = sentence.split(b'\r\n')
        headers = get_headers(line_list)
        for i in line_list:
            print(i)
        accept = str(headers.get('Accept').split(',')[0].strip())

        outputdata = f.read()
        header = ' HTTP/1.1 200 OK\r\n' \
                 'Connection: close\r\n' \
                 'Content-Type: ' + accept + '\r\n' \
                                             'Content-Length: %d\r\n\r\n' % (len(outputdata))  #长度设置 important

        client.send(header.encode()+outputdata)
        client.close()
    except IOError:
        header = ' HTTP/1.1 404 Not Found'
        client.send(header.encode())

获取的请求报文


测试网页效果/测试用的html文件。记得存在D盘根目录或者修改读取文件路径


猜你喜欢

转载自blog.csdn.net/q275757160/article/details/80154734
今日推荐