Python socket 手写server 让浏览器直接访问,从而深刻理解 HTTP 协议

本文主要是为了测试让浏览器 (而不单单是用 socket 包写的 client)和 纯 socket 包写的 server 进行通信,从而理解 HTTP 协议的规范

在这里插入图片描述

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('192.168.56.101', 8008))
sock.listen(5)

while True:
    # 等待连接
    conn, add = sock.accept()
    data = conn.recv(8096)  # 接收客户端发来的消息
    # 从data中取到路径
    # data = str(data, encoding="utf8")  # 把收到的字节类型的数据转换成字符串
    data = str(data)  # 把收到的字节类型的数据转换成字符串
    print 'data = {0}'.format(data)

    # Point 1: 按\r\n分割
    data1 = data.split("\r\n")[0]
    url = data1.split()[1]  # url是我们从浏览器发过来的消息中分离出的访问路径
    print 'url = {0}'.format(url)
    # Point 2: 按照 Http 响应格式进行回复
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')  # 因为要遵循HTTP协议,所以回复的消息也要加状态行
    # 根据不同的路径返回不同内容
    if url == "/index":
        response = b"index"
    elif url == "/home":
        response = b"home"
    else:
        response = b"404 not found! we only support /index  /home"
    #conn.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html;charset=utf-8\r\n\r\n'),发送中文的时候注意格式加上\r\n
    #conn.send(bytes('你好',encoding='utf-8'))
    conn.send(response)
    conn.close()

在这里插入图片描述
详情参考: https://www.cnblogs.com/clschao/articles/9456966.html

发布了44 篇原创文章 · 获赞 0 · 访问量 3942

猜你喜欢

转载自blog.csdn.net/cpxsxn/article/details/102781011