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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章