HTTP响应

1. http响应的过程

 

简单的web server代码

# encoding:utf-8
# @Time : 2021/5/23 12:11 下午
# @Author : yan
# @Content: 最简单的http server

from socket import *


def create_server():
    server_socket = socket(AF_INET, SOCK_STREAM)
    try:
        server_socket.bind(("localhost", 9000))
        server_socket.listen(5)
        while (1):
            client_socket, address = server_socket.accept()
            rd = client_socket.recv(5000).decode()
            piece = rd.split("\n")
            # GET / HTTP/1.1, GET /favicon.ico HTTP/1.1
            if len(piece) > 0: print(piece[0])
            data = "HTTP/1.1 200 OK\r\n" # 构造回应报文的回应行
            data += "Content-Type:text/html;charset=utf-8\r\n" # 构造回应报文的回应头
            data += "\r\n" # 回应头和回应体之间必须有一个空行
            data += "<html><body>Hello world</body></html>" # 构造回应报文的回应体
            client_socket.sendall(data.encode())
            client_socket.shutdown(SHUT_WR)
    except KeyboardInterrupt:
        print("\nShutting down ...\n")
    except Exception as exc:
        print("Error:\n")
        print(exc)

    server_socket.close()


if __name__ == '__main__':
    print("Access Http://localhost:9000")
    create_server()

 

请求结果

 

简单的浏览器客户端代码例子一

import socket
my_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_sock.connect(("127.0.0.1",9000))
cmd = "GET http://127.0.0.1/remeo.txt HTTP/1.0\r\n\r\n".encode()
my_sock.send(cmd)
while True:
    data = my_sock.recv(521)
    if len(data) < 1:
        break
    print(data.decode(), end="")

# 服务器返回的消息
# HTTP/1.1 200 OK
# Content-Type:text/html;charset=utf-8
#
# <html><body>Hello world</body></html>
my_sock.close()

 

 

简单的浏览器客户端代码例子二

import urllib.request
# 这里urlib对socket进行了封装,解析的过程已经做了,只返回了响应体的内容
fhand = urllib.request.urlopen("http://127.0.0.1:9000/remeo.txt")
# 这里只能拿回响应体内容
for line in fhand:
    # <html><body>Hello world</body></html>
    print(line.decode().strip())

 

 

 

 

 

# TODO

posted @ 2021-05-22 21:13  张京墨  阅读(113)  评论(0编辑  收藏  举报